46
46
47
47
<!-- 这里可写通用的实现逻辑 -->
48
48
49
+ ** 方法一:DFS**
50
+
51
+ ** 方法二:BFS**
52
+
49
53
<!-- tabs:start -->
50
54
51
55
### ** Python3**
52
56
53
57
<!-- 这里可写当前语言的特殊实现逻辑 -->
54
58
59
+ DFS:
60
+
55
61
``` python
56
62
# Definition for a binary tree node.
57
63
# class TreeNode:
@@ -68,6 +74,41 @@ class Solution:
68
74
return self .isSameTree(p.left, q.left) and self .isSameTree(p.right, q.right)
69
75
```
70
76
77
+ BFS:
78
+
79
+ ``` python
80
+ # Definition for a binary tree node.
81
+ # class TreeNode:
82
+ # def __init__(self, val=0, left=None, right=None):
83
+ # self.val = val
84
+ # self.left = left
85
+ # self.right = right
86
+ class Solution :
87
+ def isSameTree (self , p : TreeNode, q : TreeNode) -> bool :
88
+ if p == q:
89
+ return True
90
+ if p is None or q is None :
91
+ return False
92
+ q1, q2 = deque([p]), deque([q])
93
+ while q1 and q2:
94
+ a, b = q1.popleft(), q2.popleft()
95
+ if a.val != b.val:
96
+ return False
97
+ la, ra = a.left, a.right
98
+ lb, rb = b.left, b.right
99
+ if (la and not lb) or (lb and not la):
100
+ return False
101
+ if (ra and not rb) or (rb and not ra):
102
+ return False
103
+ if la:
104
+ q1.append(la)
105
+ q2.append(lb)
106
+ if ra:
107
+ q1.append(ra)
108
+ q2.append(rb)
109
+ return True
110
+ ```
111
+
71
112
### ** Java**
72
113
73
114
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -97,6 +138,62 @@ class Solution {
97
138
}
98
139
```
99
140
141
+ ``` java
142
+ /**
143
+ * Definition for a binary tree node.
144
+ * public class TreeNode {
145
+ * int val;
146
+ * TreeNode left;
147
+ * TreeNode right;
148
+ * TreeNode() {}
149
+ * TreeNode(int val) { this.val = val; }
150
+ * TreeNode(int val, TreeNode left, TreeNode right) {
151
+ * this.val = val;
152
+ * this.left = left;
153
+ * this.right = right;
154
+ * }
155
+ * }
156
+ */
157
+ class Solution {
158
+ public boolean isSameTree (TreeNode p , TreeNode q ) {
159
+ if (p == q) {
160
+ return true ;
161
+ }
162
+ if (p == null || q == null ) {
163
+ return false ;
164
+ }
165
+ Deque<TreeNode > q1 = new ArrayDeque<> ();
166
+ Deque<TreeNode > q2 = new ArrayDeque<> ();
167
+ q1. offer(p);
168
+ q2. offer(q);
169
+ while (! q1. isEmpty() && ! q2. isEmpty()) {
170
+ p = q1. poll();
171
+ q = q2. poll();
172
+ if (p. val != q. val) {
173
+ return false ;
174
+ }
175
+ TreeNode la = p. left, ra = p. right;
176
+ TreeNode lb = q. left, rb = q. right;
177
+ if ((la != null && lb == null ) || (lb != null && la == null )) {
178
+ return false ;
179
+ }
180
+ if ((ra != null && rb == null ) || (rb != null && ra == null )) {
181
+ return false ;
182
+ }
183
+ if (la != null ) {
184
+ q1. offer(la);
185
+ q2. offer(lb);
186
+ }
187
+ if (ra != null ) {
188
+ q1. offer(ra);
189
+ q2. offer(rb);
190
+ }
191
+ }
192
+ return true ;
193
+ }
194
+ }
195
+ ```
196
+
100
197
### ** C++**
101
198
102
199
``` cpp
@@ -121,6 +218,52 @@ public:
121
218
};
122
219
```
123
220
221
+ ```cpp
222
+ /**
223
+ * Definition for a binary tree node.
224
+ * struct TreeNode {
225
+ * int val;
226
+ * TreeNode *left;
227
+ * TreeNode *right;
228
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
229
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
230
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
231
+ * };
232
+ */
233
+ class Solution {
234
+ public:
235
+ bool isSameTree(TreeNode* p, TreeNode* q) {
236
+ if (p == q) return true;
237
+ if (!p || !q) return false;
238
+ queue<TreeNode*> q1{{p}};
239
+ queue<TreeNode*> q2{{q}};
240
+ while (!q1.empty() && !q2.empty())
241
+ {
242
+ p = q1.front();
243
+ q = q2.front();
244
+ if (p->val != q->val) return false;
245
+ q1.pop();
246
+ q2.pop();
247
+ TreeNode *la = p->left, *ra = p->right;
248
+ TreeNode *lb = q->left, *rb = q->right;
249
+ if ((la && !lb) || (lb && !la)) return false;
250
+ if ((ra && !rb) || (rb && !ra)) return false;
251
+ if (la)
252
+ {
253
+ q1.push(la);
254
+ q2.push(lb);
255
+ }
256
+ if (ra)
257
+ {
258
+ q1.push(ra);
259
+ q2.push(rb);
260
+ }
261
+ }
262
+ return true;
263
+ }
264
+ };
265
+ ```
266
+
124
267
### ** Go**
125
268
126
269
``` go
@@ -143,6 +286,51 @@ func isSameTree(p *TreeNode, q *TreeNode) bool {
143
286
}
144
287
```
145
288
289
+ ``` go
290
+ /* *
291
+ * Definition for a binary tree node.
292
+ * type TreeNode struct {
293
+ * Val int
294
+ * Left *TreeNode
295
+ * Right *TreeNode
296
+ * }
297
+ */
298
+ func isSameTree (p *TreeNode , q *TreeNode ) bool {
299
+ if p == q {
300
+ return true
301
+ }
302
+ if p == nil || q == nil {
303
+ return false
304
+ }
305
+ q1 := []*TreeNode{p}
306
+ q2 := []*TreeNode{q}
307
+ for len (q1) > 0 && len (q2) > 0 {
308
+ p, q = q1[0 ], q2[0 ]
309
+ if p.Val != q.Val {
310
+ return false
311
+ }
312
+ q1, q2 = q1[1 :], q2[1 :]
313
+ la , ra := p.Left , p.Right
314
+ lb , rb := q.Left , q.Right
315
+ if (la != nil && lb == nil ) || (lb != nil && la == nil ) {
316
+ return false
317
+ }
318
+ if (ra != nil && rb == nil ) || (rb != nil && ra == nil ) {
319
+ return false
320
+ }
321
+ if la != nil {
322
+ q1 = append (q1, la)
323
+ q2 = append (q2, lb)
324
+ }
325
+ if ra != nil {
326
+ q1 = append (q1, ra)
327
+ q2 = append (q2, rb)
328
+ }
329
+ }
330
+ return true
331
+ }
332
+ ```
333
+
146
334
### ** JavaScript**
147
335
148
336
``` js
0 commit comments