判断一棵树是否是镜像的。简单的DFS题。
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.
核心就是:对称的两边node都不为空(否则就false)的情况下,分别递归判断左边的左node/右边的右node && 左边的右node/右边的左node
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){return true; }
return isMirror(root.left, root.right);
}
public boolean isMirror(TreeNode left, TreeNode right){
if(left == null && right == null) {
return true;}
else if((left == null && right != null) ||
(left != null && right == null) ||
(left.val != right.val) ){
return false;
}else{
return isMirror(left.left, right.right) && isMirror(left.right, right.left) ;
}
}
}
可以写的更简洁:
class Solution {
public boolean isSymmetric(TreeNode root) {
return dfs(root, root);
}
private boolean dfs(TreeNode left, TreeNode right) {
if (left == null || right == null) return left == right;
if (left.val != right.val) return false;
return dfs(left.right, right.left) && dfs(left.left, right.right);
}
}