Skip to content

Commit 7121def

Browse files
committed
feat: add solutions to lc problem: No.0854
No.0854.K-Similar Strings
1 parent 56056b2 commit 7121def

File tree

8 files changed

+848
-2
lines changed

8 files changed

+848
-2
lines changed

solution/0100-0199/0100.Same Tree/README.md

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,18 @@
4646

4747
<!-- 这里可写通用的实现逻辑 -->
4848

49+
**方法一:DFS**
50+
51+
**方法二:BFS**
52+
4953
<!-- tabs:start -->
5054

5155
### **Python3**
5256

5357
<!-- 这里可写当前语言的特殊实现逻辑 -->
5458

59+
DFS:
60+
5561
```python
5662
# Definition for a binary tree node.
5763
# class TreeNode:
@@ -68,6 +74,41 @@ class Solution:
6874
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
6975
```
7076

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+
71112
### **Java**
72113

73114
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -97,6 +138,62 @@ class Solution {
97138
}
98139
```
99140

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+
100197
### **C++**
101198

102199
```cpp
@@ -121,6 +218,52 @@ public:
121218
};
122219
```
123220
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+
124267
### **Go**
125268

126269
```go
@@ -143,6 +286,51 @@ func isSameTree(p *TreeNode, q *TreeNode) bool {
143286
}
144287
```
145288

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+
146334
### **JavaScript**
147335

148336
```js

0 commit comments

Comments
 (0)