Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
Source
public boolean isSymmetric(TreeNode root) {
if(root == null) return true; //注意这种情况算是
return isS(root.left,root.right);
}
public boolean isS(TreeNode t1, TreeNode t2){
if(t1 == null && t2 == null){
return true;
}
if(t1 == null && t2 != null){
return false;
}
if(t1 != null && t2 == null){
return false;
}
if(t1.val != t2.val){
return false;
}
return (isS(t1.left, t2.right) && isS(t1.right, t2.left)); //重点
}
Test
public static void main(String[] args){
TreeNode a = new TreeNode(1);
a.left = new TreeNode(2);
a.right = new TreeNode(2);
a.left.left = new TreeNode(3);
a.left.right = new TreeNode(4);
a.right.left = new TreeNode(3);
a.right.right = new TreeNode(3);
System.out.println(new Solution().isSymmetric(a));
}