Symmetric Tree leetcode java

题目:

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.

 

题解

判断左右子树是否相等。

递归的解法:

 1   public  boolean isSymmetricTree(TreeNode p,TreeNode q){
 2       if(p ==  null&&q ==  null)
 3          return  true;
 4       if(p ==  null||q ==  null)
 5          return  false;
 6       return (p.val == q.val) && isSymmetricTree(p.left, q.right) && isSymmetricTree(p.right, q.left);
 7 }
 8 
 9  public  boolean isSymmetric(TreeNode root) {
10      if(root== null
11          return  true;
12         
13      return isSymmetricTree(root.left,root.right);
14 }

 

非递归解法:

 1  public  boolean isSymmetric(TreeNode root) {
 2      if(root ==  null)
 3          return  true;
 4      if(root.left ==  null && root.right ==  null)
 5          return  true;
 6      if(root.left ==  null || root.right ==  null)
 7          return  false;
 8     LinkedList<TreeNode> q1 =  new LinkedList<TreeNode>();
 9     LinkedList<TreeNode> q2 =  new LinkedList<TreeNode>();
10     q1.add(root.left);
11     q2.add(root.right);
12      while(!q1.isEmpty() && !q2.isEmpty()){
13         TreeNode n1 = q1.poll();
14         TreeNode n2 = q2.poll();
15         
16          if(n1.val != n2.val)
17              return  false;
18          if((n1.left ==  null && n2.right !=  null) || (n1.left !=  null && n2.right ==  null))
19              return  false;
20          if((n1.right ==  null && n2.left !=  null) || (n1.right !=  null && n2.left ==  null))
21              return  false;
22         
23          if(n1.left !=  null && n2.right !=  null){
24             q1.add(n1.left);
25             q2.add(n2.right);
26         }
27         
28          if(n1.right !=  null && n2.left !=  null){
29             q1.add(n1.right);
30             q2.add(n2.left);
31         }            
32     }
33      return  true;
34 }

 Reference:

 http://blog.csdn.net/linhuanmars/article/details/23072829

你可能感兴趣的:(LeetCode)