@@ -224,6 +224,74 @@ function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
224
224
}
225
225
```
226
226
227
+ ``` ts
228
+ /**
229
+ * Definition for a binary tree node.
230
+ * class TreeNode {
231
+ * val: number
232
+ * left: TreeNode | null
233
+ * right: TreeNode | null
234
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
235
+ * this.val = (val===undefined ? 0 : val)
236
+ * this.left = (left===undefined ? null : left)
237
+ * this.right = (right===undefined ? null : right)
238
+ * }
239
+ * }
240
+ */
241
+
242
+ function buildTree(preorder : number [], inorder : number []): TreeNode | null {
243
+ if (inorder .length === 0 ) {
244
+ return null ;
245
+ }
246
+ const val = preorder [0 ];
247
+ const i = inorder .indexOf (val );
248
+ return new TreeNode (
249
+ val ,
250
+ buildTree (preorder .slice (1 , i + 1 ), inorder .slice (0 , i )),
251
+ buildTree (preorder .slice (i + 1 ), inorder .slice (i + 1 )),
252
+ );
253
+ }
254
+ ```
255
+
256
+ ### ** Rust**
257
+
258
+ ``` rust
259
+ // Definition for a binary tree node.
260
+ // #[derive(Debug, PartialEq, Eq)]
261
+ // pub struct TreeNode {
262
+ // pub val: i32,
263
+ // pub left: Option<Rc<RefCell<TreeNode>>>,
264
+ // pub right: Option<Rc<RefCell<TreeNode>>>,
265
+ // }
266
+ //
267
+ // impl TreeNode {
268
+ // #[inline]
269
+ // pub fn new(val: i32) -> Self {
270
+ // TreeNode {
271
+ // val,
272
+ // left: None,
273
+ // right: None
274
+ // }
275
+ // }
276
+ // }
277
+ use std :: rc :: Rc ;
278
+ use std :: cell :: RefCell ;
279
+ impl Solution {
280
+ pub fn build_tree (preorder : Vec <i32 >, inorder : Vec <i32 >) -> Option <Rc <RefCell <TreeNode >>> {
281
+ if inorder . is_empty () {
282
+ return None ;
283
+ }
284
+ let val = preorder [0 ];
285
+ let i = inorder . iter (). position (| num | * num == val ). unwrap ();
286
+ Some (Rc :: new (RefCell :: new (TreeNode {
287
+ val ,
288
+ left : Self :: build_tree (preorder [1 .. i + 1 ]. to_vec (), inorder [.. i ]. to_vec ()),
289
+ right : Self :: build_tree (preorder [i + 1 .. ]. to_vec (), inorder [i + 1 .. ]. to_vec ()),
290
+ })))
291
+ }
292
+ }
293
+ ```
294
+
227
295
### ** ...**
228
296
229
297
```
0 commit comments