题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

ac代码:

 1 /*
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 import java.util.ArrayList;
15 public class Solution {
16     boolean isSymmetrical(TreeNode pRoot)
17     {
18          dfs1(pRoot,1);
19         Mirror(pRoot);
20         dfs2(pRoot,1);
21         if(list1.size()!=list2.size())
22             return false;
23         for(int i=0;i<list1.size();i++){
24             if(list1.get(i)!=list2.get(i)){
25                 return false;
26             }
27         }
28         return true;
29     }
30       ArrayList<Integer>list1=new ArrayList<Integer>();
31      ArrayList<Integer>list2=new ArrayList<Integer>();
32     void dfs1(TreeNode p,int t){
33         if(p!=null){
34             if(t==1)
35             list1.add(p.val+1);
36             if(t==2)
37             list1.add(p.val+2);
38             dfs1(p.left,1);
39             dfs1(p.right,2);
40         }
41     }
42     void dfs2(TreeNode p,int t){
43         if(p!=null){
44             if(t==1)
45                 list2.add(p.val+1);
46                 if(t==2)
47                 list2.add(p.val+2);
48                 dfs2(p.left,1);
49                 dfs2(p.right,2);
50         }
51     }
52 
53     void Mirror(TreeNode root) {
54         if(root==null)
55             return ;
56         TreeNode t=root.left;
57         root.left=root.right;
58         root.right=t;
59         Mirror(root.left);
60         Mirror(root.right);
61     }
62     
63     
64 }

 

 posted on 2018-04-12 19:11  几缕清风依旧  阅读(138)  评论(0编辑  收藏  举报