判断对称树。题意是给一个树,判断它是不是左右对称/轴对称的。例子
For example, this binary tree
[1,2,2,3,4,4,3]
is symmetric:1 / \ 2 2 / \ / \ 3 4 4 3
But the following
[1,2,2,null,3,null,3]
is not:1 / \ 2 2 \ \ 3 3
题目很简单,跟100题几乎一样,也是用DFS思路做。唯一不同的地方是当判断子树的时候,100题是判断left.left === right.left;而这题是判断left.right === right.left
时间O(n)
空间O(n)
1 /** 2 * @param {TreeNode} root 3 * @return {boolean} 4 */ 5 var isSymmetric = function(root) { 6 if (root === null) return true; 7 return helper(root.left, root.right); 8 }; 9 10 var helper = function(left, right) { 11 if (left === null && right === null) return true; 12 if (left === null || right === null) return false; 13 if (left.val !== right.val) return false; 14 return helper(left.left, right.right) && helper(left.right, right.left); 15 };
BFS解法
时间O(n)
空间O(n)
1 /** 2 * @param {TreeNode} root 3 * @return {boolean} 4 */ 5 var isSymmetric = function(root) { 6 const q = [root, root]; 7 while (q.length) { 8 const [l, r] = [q.shift(), q.shift()]; 9 if (!l && !r) continue; 10 if (!!l !== !!r || l.val !== r.val) return false; 11 q.push(l.left, r.right, l.right, r.left); 12 } 13 return true; 14 };