Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
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
Note:
Bonus points if you could solve it both recursively and iteratively.
递归:
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return helper(root.left,root.right);
}
public boolean helper(TreeNode p, TreeNode q) {
if(p==null && q==null) return true;
if(p==null || q==null) return false;
return (p.val==q.val) && helper(p.left,q.right) && helper(p.right,q.left);
}
迭代:
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root.left);
stack.push(root.right);
while(!stack.empty()) {
TreeNode right = stack.pop();
TreeNode left = stack.pop();
if (left == null && right == null) continue;
else if (left == null || right == null || right.val != left.val) return false;
stack.push(left.left);
stack.push(right.right);
stack.push(left.right);
stack.push(right.left);
}
return true;
}