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.
使用队列,两两加入队列,两两出队列
1 public boolean isSymmetric(TreeNode root) {//树 my 2 if(null==root){ 3 return true; 4 } 5 LinkedList<TreeNode> queue = new LinkedList<>(); 6 queue.add(root.left); 7 queue.add(root.right); 8 while(queue.size()!=0){ 9 TreeNode n1 = queue.poll(); 10 TreeNode n2 = queue.poll(); 11 if(n1==null&&null==n2) continue; 12 if(null==n1||null==n2) return false; 13 if(n1.val!=n2.val) return false; 14 queue.add(n1.left); 15 queue.add(n2.right); 16 queue.add(n1.right); 17 queue.add(n2.left); 18 } 19 return true; 20 }
递归
1 class Solution { 2 public boolean isSymmetric(TreeNode root) {//树 my 3 if(null==root){ 4 return true; 5 } 6 return help(root.left,root.right); 7 } 8 private boolean help(TreeNode n1 ,TreeNode n2){ 9 if(n1==null&&null==n2) return true; 10 if(null==n1||null==n2) return false; 11 if(n1.val!=n2.val) return false; 12 return help(n1.left,n2.right)&&help(n1.right,n2.left); 13 } 14 }