-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path101. Symmetric Tree
98 lines (91 loc) · 2.72 KB
/
101. Symmetric Tree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(isMirror(root,root))
return true;
else
return false;
}
public boolean isMirror(TreeNode l, TreeNode r){
if(l==null&&r==null)
return true;
if((l!=null)&&(r!=null)&&(l.val==r.val))
if(isMirror(l.left,r.right)&&isMirror(l.right,r.left))
return true;
return false;
}
}
Iterative way, kind of complex
public class Solution {
public boolean isSymmetric(TreeNode root) {
return isMirror(root,root);
}
public boolean isMirror(TreeNode l, TreeNode r){
if(l==null&&r==null)
return true;
Queue<ArrayList<TreeNode>> tmp=new LinkedList<ArrayList<TreeNode>>();
ArrayList<TreeNode> res= new ArrayList<TreeNode> ();
res.add(l);
res.add(r);
tmp.offer(res);
while(!tmp.isEmpty()){
ArrayList<TreeNode>head=tmp.poll();
TreeNode l1=head.get(0);
TreeNode r1=head.get(1);
if(l1==null&&r1==null)
continue;
if(l1!=null&&r1!=null&&l1.val==r1.val){
ArrayList<TreeNode> temp1=new ArrayList<TreeNode>();
ArrayList<TreeNode> temp2=new ArrayList<TreeNode>();
temp1.add(l1.left);
temp1.add(r1.right);
tmp.offer(temp1);
temp2.add(l1.right);
temp2.add(r1.left);
tmp.offer(temp2);
}
else
return false;
}
return true;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.offer(root);
queue.offer(root);//精髓在你先导入两个root进去,因为没有mirror,你需要创造mirror, 而且l和r需要两个一样的node
while(!queue.isEmpty()){
TreeNode l=queue.poll();
TreeNode r=queue.poll();
if(l==null&&r==null)
continue;
if(l!=null&&r!=null&&l.val==r.val){
queue.offer(l.left);
queue.offer(r.right);
queue.offer(l.right);
queue.offer(r.left);
}
else //千万别忘了
return false;
}
return true;
}
}