68
68
# self.left = left
69
69
# self.right = right
70
70
class Solution :
71
- def buildTree (self , preorder : List[int ], inorder : List[int ]) -> TreeNode:
71
+ def buildTree (self , preorder : List[int ], inorder : List[int ]) -> Optional[ TreeNode] :
72
72
if not preorder:
73
73
return None
74
74
v = preorder[0 ]
@@ -79,6 +79,29 @@ class Solution:
79
79
return root
80
80
```
81
81
82
+ ``` python
83
+ # Definition for a binary tree node.
84
+ # class TreeNode:
85
+ # def __init__(self, val=0, left=None, right=None):
86
+ # self.val = val
87
+ # self.left = left
88
+ # self.right = right
89
+ class Solution :
90
+ def buildTree (self , preorder : List[int ], inorder : List[int ]) -> Optional[TreeNode]:
91
+ def dfs (i , j , n ):
92
+ if n <= 0 :
93
+ return None
94
+ v = preorder[i]
95
+ k = d[v]
96
+ root = TreeNode(v)
97
+ root.left = dfs(i + 1 , j, k - j)
98
+ root.right = dfs(i + 1 + k - j, k + 1 , n - k + j - 1 )
99
+ return root
100
+
101
+ d = {v: i for i, v in enumerate (inorder)}
102
+ return dfs(0 , 0 , len (preorder))
103
+ ```
104
+
82
105
### ** Java**
83
106
84
107
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -265,6 +288,42 @@ impl Solution {
265
288
}
266
289
```
267
290
291
+ ### ** JavaScript**
292
+
293
+ ``` js
294
+ /**
295
+ * Definition for a binary tree node.
296
+ * function TreeNode(val, left, right) {
297
+ * this.val = (val===undefined ? 0 : val)
298
+ * this.left = (left===undefined ? null : left)
299
+ * this.right = (right===undefined ? null : right)
300
+ * }
301
+ */
302
+ /**
303
+ * @param {number[]} preorder
304
+ * @param {number[]} inorder
305
+ * @return {TreeNode}
306
+ */
307
+ var buildTree = function (preorder , inorder ) {
308
+ function dfs (i , j , n ) {
309
+ if (n <= 0 ) {
310
+ return null ;
311
+ }
312
+ const v = preorder[i];
313
+ const k = d[v];
314
+ const root = new TreeNode (v);
315
+ root .left = dfs (i + 1 , j, k - j);
316
+ root .right = dfs (i + 1 + k - j, k + 1 , n - k + j - 1 );
317
+ return root;
318
+ }
319
+ const d = new Map ();
320
+ for (const [i , v ] of inorder .entries ()) {
321
+ d[v] = i;
322
+ }
323
+ return dfs (0 , 0 , inorder .length );
324
+ };
325
+ ```
326
+
268
327
### ** ...**
269
328
270
329
```
0 commit comments