class Node {
constructor(value, left, right) {
this.value = value;
this.left = left;
this.right = right;
}
}
let n2 = new Node(2, null, null);
let n2_2 = new Node(2, null, null);
let n1 = new Node(1, null, n2);
let n1_2 = new Node(1, n2_2, null);
let n4 = new Node(4, null, null);
let n4_2 = new Node(4, null, null);
let n3 = new Node(3, n4, n1);
let n3_2 = new Node(3, n1_2, n4_2);
let root = new Node(5, n3, n3_2);
function fn(root) {
function 对比(left, right) {
if (left == null && right == null) {
return true
} else if (left == null || right == null) {
return false
} else if (left.value != right.value) {
return false
}
let 外侧 = 对比(left.left, right.right)
let 内侧 = 对比(left.right, right.left)
return 外侧 && 内侧
}
return 对比(root.left, root.right)
}
console.log('递归实现', fn(root))
function fn2(root) {
let queue = []
queue.push(root.left)
queue.push(root.right)
while (queue.length) {
let 左节点 = queue.shift()
let 右节点 = queue.shift()
if (左节点 == null && 右节点 == null) {
continue
}
if (左节点 == null || 右节点 == null || 左节点.value != 右节点.value) {
return false
}
queue.push(左节点.left)
queue.push(右节点.right)
queue.push(左节点.right)
queue.push(右节点.left)
}
return true
}
console.log('层序遍历实现', fn2(root))
console