43
43
44
44
<!-- 这里可写通用的实现逻辑 -->
45
45
46
+ ** 方法一:递归**
47
+
48
+ 递归合并两棵树的节点。
49
+
50
+ - 如果其中一棵树的当前节点为空,则返回另一棵树的当前节点作为合并后节点。
51
+ - 如果两棵树的当前节点都不为空,则将它们的值相加作为合并后节点的新值,然后递归合并它们的左右子节点。
52
+
53
+ 时间复杂度 $O(m)$,空间复杂度 $O(m)$。其中 $m$ 是两棵树的节点数的最小值。
54
+
46
55
<!-- tabs:start -->
47
56
48
57
### ** Python3**
57
66
# self.left = left
58
67
# self.right = right
59
68
class Solution :
60
- def mergeTrees (self , root1 : TreeNode, root2 : TreeNode) -> TreeNode:
69
+ def mergeTrees (self , root1 : Optional[ TreeNode] , root2 : Optional[ TreeNode] ) -> Optional[ TreeNode] :
61
70
if root1 is None :
62
71
return root2
63
72
if root2 is None :
@@ -104,36 +113,6 @@ class Solution {
104
113
}
105
114
```
106
115
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
-
137
116
### ** C++**
138
117
139
118
``` cpp
@@ -151,12 +130,8 @@ function mergeTrees(
151
130
class Solution {
152
131
public:
153
132
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;
160
135
TreeNode* node = new TreeNode(root1->val + root2->val);
161
136
node->left = mergeTrees(root1->left, root2->left);
162
137
node->right = mergeTrees(root1->right, root2->right);
@@ -190,6 +165,36 @@ func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
190
165
}
191
166
```
192
167
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
+
193
198
### ** Rust**
194
199
195
200
``` rust
@@ -237,6 +242,36 @@ impl Solution {
237
242
}
238
243
```
239
244
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
+
240
275
### ** ...**
241
276
242
277
```
0 commit comments