1.递归法
- 同一个级别 两个节点如何判断它是否对称,假设设a 和 b两个同一代节点
- 如果a 是 null 且 b也为null 则直接返回true
- 如果a是null 但是b不是null 则返回false
- 如果a不是null,但是b是null 则返回false
- 否则就是a和b都不为null,则就需要进一步判断了,需要满足下面条件
- a.val === b.val
- a.left 和 b.right 也是一对对称节点
- a.right 和 b.left 也是一对对称节点
var isSymmetric = function(root) {
if(!root) return true
var f = (left,right) => {
if(!left && !right) return true
if(!left || !right) return false // 这里和 上面有先后关系
return (
f(left.right,right.left) &&
f(left.left,right.right) &&
left.val == right.val
)
}
return f(root.left,root.right)
};
2.方法二
把每一代的节点都放入一个队列里面,然后等到队列走完后,再次入列下一代的节点,直到所有的节点都走完
const isSymmetric = (root) => {
if (!root) return true;
const queue = [root.left, root.right];
while (queue.length) {
const len = queue.length;
for (let i = 0; i < len; i += 2) {
const left = queue.shift();
const right = queue.shift();
if ((left && !right) || (!left && right)) return false;
if (left && right) {
if (left.val !== right.val) return false;
queue.push(left.left, right.right, left.right, right.left);
}
}
}
return true;
};