-
Notifications
You must be signed in to change notification settings - Fork 0
/
100. 相同的树.java
81 lines (74 loc) · 2.67 KB
/
100. 相同的树.java
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
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
// class Solution {
// public boolean isSameTree(TreeNode p, TreeNode q) {
// /*
// * 都为空,return true
// * 一个为空,一个不为空,return false
// * 都不为空,但值不相等,return false
// * 都不为空,同时当前结点的值相等,此时需进一步判断。
// */
// if(p == null && q == null){
// return true;
// }else if((p == null || q == null) || (p.val != q.val)){ // p == null && q != null) || (p != null && q == null
// return false;
// }
// // else if(p.val != q.val){ // 可以和上面的部分合并
// // return false;
// // }
// boolean left = isSameTree(p.left, q.left);
// boolean right = isSameTree(p.right, q.right);
// return left && right;
// }
// }
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
/*
* 都为空,return true
* 一个为空,一个不为空,return false
* 都不为空,但值不相等,return false
* 都不为空,同时当前结点的值相等,此时需进一步判断。
*/
if(p == null || q == null){
return p == q;
}
Queue<TreeNode> treeQueue = new LinkedList<>();
treeQueue.offer(p);
treeQueue.offer(q);
while(!treeQueue.isEmpty()){
TreeNode tempP = treeQueue.poll();
TreeNode tempQ = treeQueue.poll();
if(tempP.val != tempQ.val){
return false;
}
if(tempP.left == null ^ tempQ.left == null){ // 位运算, 相同位则返回0,不同位则返回1。若返回1,则肯定一个为null,一个不为null
return false;
}
if(tempP.right == null ^ tempQ.right == null){
return false;
}
if(tempP.left != null && tempQ.left != null){ // 运行到这里,tempP和tempQ的左右子节点要么都为空,要么都非空
treeQueue.offer(tempP.left);
treeQueue.offer(tempQ.left);
}
if(tempP.right != null && tempQ.right != null){
treeQueue.offer(tempP.right);
treeQueue.offer(tempQ.right);
}
}
return true;
}
}