Skip to content

Commit 4e7f2b0

Browse files
committed
feat: add solutions to lc problem: No.0617
No.0617.Merge Two Binary Trees
1 parent 3bb2d93 commit 4e7f2b0

File tree

5 files changed

+163
-81
lines changed

5 files changed

+163
-81
lines changed

solution/0600-0699/0617.Merge Two Binary Trees/README.md

+72-37
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@
4343

4444
<!-- 这里可写通用的实现逻辑 -->
4545

46+
**方法一:递归**
47+
48+
递归合并两棵树的节点。
49+
50+
- 如果其中一棵树的当前节点为空,则返回另一棵树的当前节点作为合并后节点。
51+
- 如果两棵树的当前节点都不为空,则将它们的值相加作为合并后节点的新值,然后递归合并它们的左右子节点。
52+
53+
时间复杂度 $O(m)$,空间复杂度 $O(m)$。其中 $m$ 是两棵树的节点数的最小值。
54+
4655
<!-- tabs:start -->
4756

4857
### **Python3**
@@ -57,7 +66,7 @@
5766
# self.left = left
5867
# self.right = right
5968
class Solution:
60-
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
69+
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
6170
if root1 is None:
6271
return root2
6372
if root2 is None:
@@ -104,36 +113,6 @@ class Solution {
104113
}
105114
```
106115

107-
### **TypeScript**
108-
109-
```ts
110-
/**
111-
* Definition for a binary tree node.
112-
* class TreeNode {
113-
* val: number
114-
* left: TreeNode | null
115-
* right: TreeNode | null
116-
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
117-
* this.val = (val===undefined ? 0 : val)
118-
* this.left = (left===undefined ? null : left)
119-
* this.right = (right===undefined ? null : right)
120-
* }
121-
* }
122-
*/
123-
124-
function mergeTrees(
125-
root1: TreeNode | null,
126-
root2: TreeNode | null,
127-
): TreeNode | null {
128-
if (root1 == null && root2 == null) return null;
129-
if (root1 == null) return root2;
130-
if (root2 == null) return root1;
131-
let left = mergeTrees(root1.left, root2.left);
132-
let right = mergeTrees(root1.right, root2.right);
133-
return new TreeNode(root1.val + root2.val, left, right);
134-
}
135-
```
136-
137116
### **C++**
138117

139118
```cpp
@@ -151,12 +130,8 @@ function mergeTrees(
151130
class Solution {
152131
public:
153132
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
154-
if (root1 == nullptr) {
155-
return root2;
156-
}
157-
if (root2 == nullptr) {
158-
return root1;
159-
}
133+
if (!root1) return root2;
134+
if (!root2) return root1;
160135
TreeNode* node = new TreeNode(root1->val + root2->val);
161136
node->left = mergeTrees(root1->left, root2->left);
162137
node->right = mergeTrees(root1->right, root2->right);
@@ -190,6 +165,36 @@ func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
190165
}
191166
```
192167

168+
### **TypeScript**
169+
170+
```ts
171+
/**
172+
* Definition for a binary tree node.
173+
* class TreeNode {
174+
* val: number
175+
* left: TreeNode | null
176+
* right: TreeNode | null
177+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
178+
* this.val = (val===undefined ? 0 : val)
179+
* this.left = (left===undefined ? null : left)
180+
* this.right = (right===undefined ? null : right)
181+
* }
182+
* }
183+
*/
184+
185+
function mergeTrees(
186+
root1: TreeNode | null,
187+
root2: TreeNode | null,
188+
): TreeNode | null {
189+
if (root1 == null && root2 == null) return null;
190+
if (root1 == null) return root2;
191+
if (root2 == null) return root1;
192+
let left = mergeTrees(root1.left, root2.left);
193+
let right = mergeTrees(root1.right, root2.right);
194+
return new TreeNode(root1.val + root2.val, left, right);
195+
}
196+
```
197+
193198
### **Rust**
194199

195200
```rust
@@ -237,6 +242,36 @@ impl Solution {
237242
}
238243
```
239244

245+
### **JavaScript**
246+
247+
```js
248+
/**
249+
* Definition for a binary tree node.
250+
* function TreeNode(val, left, right) {
251+
* this.val = (val===undefined ? 0 : val)
252+
* this.left = (left===undefined ? null : left)
253+
* this.right = (right===undefined ? null : right)
254+
* }
255+
*/
256+
/**
257+
* @param {TreeNode} root1
258+
* @param {TreeNode} root2
259+
* @return {TreeNode}
260+
*/
261+
var mergeTrees = function (root1, root2) {
262+
if (!root1) {
263+
return root2;
264+
}
265+
if (!root2) {
266+
return root1;
267+
}
268+
const node = new TreeNode(root1.val + root2.val);
269+
node.left = mergeTrees(root1.left, root2.left);
270+
node.right = mergeTrees(root1.right, root2.right);
271+
return node;
272+
};
273+
```
274+
240275
### **...**
241276

242277
```

solution/0600-0699/0617.Merge Two Binary Trees/README_EN.md

+63-37
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
# self.left = left
5050
# self.right = right
5151
class Solution:
52-
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
52+
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
5353
if root1 is None:
5454
return root2
5555
if root2 is None:
@@ -94,36 +94,6 @@ class Solution {
9494
}
9595
```
9696

97-
### **TypeScript**
98-
99-
```ts
100-
/**
101-
* Definition for a binary tree node.
102-
* class TreeNode {
103-
* val: number
104-
* left: TreeNode | null
105-
* right: TreeNode | null
106-
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
107-
* this.val = (val===undefined ? 0 : val)
108-
* this.left = (left===undefined ? null : left)
109-
* this.right = (right===undefined ? null : right)
110-
* }
111-
* }
112-
*/
113-
114-
function mergeTrees(
115-
root1: TreeNode | null,
116-
root2: TreeNode | null,
117-
): TreeNode | null {
118-
if (root1 == null && root2 == null) return null;
119-
if (root1 == null) return root2;
120-
if (root2 == null) return root1;
121-
let left = mergeTrees(root1.left, root2.left);
122-
let right = mergeTrees(root1.right, root2.right);
123-
return new TreeNode(root1.val + root2.val, left, right);
124-
}
125-
```
126-
12797
### **C++**
12898

12999
```cpp
@@ -141,12 +111,8 @@ function mergeTrees(
141111
class Solution {
142112
public:
143113
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
144-
if (root1 == nullptr) {
145-
return root2;
146-
}
147-
if (root2 == nullptr) {
148-
return root1;
149-
}
114+
if (!root1) return root2;
115+
if (!root2) return root1;
150116
TreeNode* node = new TreeNode(root1->val + root2->val);
151117
node->left = mergeTrees(root1->left, root2->left);
152118
node->right = mergeTrees(root1->right, root2->right);
@@ -180,6 +146,36 @@ func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
180146
}
181147
```
182148

149+
### **TypeScript**
150+
151+
```ts
152+
/**
153+
* Definition for a binary tree node.
154+
* class TreeNode {
155+
* val: number
156+
* left: TreeNode | null
157+
* right: TreeNode | null
158+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
159+
* this.val = (val===undefined ? 0 : val)
160+
* this.left = (left===undefined ? null : left)
161+
* this.right = (right===undefined ? null : right)
162+
* }
163+
* }
164+
*/
165+
166+
function mergeTrees(
167+
root1: TreeNode | null,
168+
root2: TreeNode | null,
169+
): TreeNode | null {
170+
if (root1 == null && root2 == null) return null;
171+
if (root1 == null) return root2;
172+
if (root2 == null) return root1;
173+
let left = mergeTrees(root1.left, root2.left);
174+
let right = mergeTrees(root1.right, root2.right);
175+
return new TreeNode(root1.val + root2.val, left, right);
176+
}
177+
```
178+
183179
### **Rust**
184180

185181
```rust
@@ -227,6 +223,36 @@ impl Solution {
227223
}
228224
```
229225

226+
### **JavaScript**
227+
228+
```js
229+
/**
230+
* Definition for a binary tree node.
231+
* function TreeNode(val, left, right) {
232+
* this.val = (val===undefined ? 0 : val)
233+
* this.left = (left===undefined ? null : left)
234+
* this.right = (right===undefined ? null : right)
235+
* }
236+
*/
237+
/**
238+
* @param {TreeNode} root1
239+
* @param {TreeNode} root2
240+
* @return {TreeNode}
241+
*/
242+
var mergeTrees = function (root1, root2) {
243+
if (!root1) {
244+
return root2;
245+
}
246+
if (!root2) {
247+
return root1;
248+
}
249+
const node = new TreeNode(root1.val + root2.val);
250+
node.left = mergeTrees(root1.left, root2.left);
251+
node.right = mergeTrees(root1.right, root2.right);
252+
return node;
253+
};
254+
```
255+
230256
### **...**
231257

232258
```

solution/0600-0699/0617.Merge Two Binary Trees/Solution.cpp

+2-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,8 @@
1212
class Solution {
1313
public:
1414
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
15-
if (root1 == nullptr) {
16-
return root2;
17-
}
18-
if (root2 == nullptr) {
19-
return root1;
20-
}
15+
if (!root1) return root2;
16+
if (!root2) return root1;
2117
TreeNode* node = new TreeNode(root1->val + root2->val);
2218
node->left = mergeTrees(root1->left, root2->left);
2319
node->right = mergeTrees(root1->right, root2->right);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root1
11+
* @param {TreeNode} root2
12+
* @return {TreeNode}
13+
*/
14+
var mergeTrees = function (root1, root2) {
15+
if (!root1) {
16+
return root2;
17+
}
18+
if (!root2) {
19+
return root1;
20+
}
21+
const node = new TreeNode(root1.val + root2.val);
22+
node.left = mergeTrees(root1.left, root2.left);
23+
node.right = mergeTrees(root1.right, root2.right);
24+
return node;
25+
};

solution/0600-0699/0617.Merge Two Binary Trees/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# self.left = left
66
# self.right = right
77
class Solution:
8-
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
8+
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
99
if root1 is None:
1010
return root2
1111
if root2 is None:

0 commit comments

Comments
 (0)