@@ -186,6 +186,81 @@ func buildTree(preorder []int, inorder []int) *TreeNode {
186
186
}
187
187
```
188
188
189
+ ### ** TypeScript**
190
+
191
+ ``` ts
192
+ /**
193
+ * Definition for a binary tree node.
194
+ * class TreeNode {
195
+ * val: number
196
+ * left: TreeNode | null
197
+ * right: TreeNode | null
198
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
199
+ * this.val = (val===undefined ? 0 : val)
200
+ * this.left = (left===undefined ? null : left)
201
+ * this.right = (right===undefined ? null : right)
202
+ * }
203
+ * }
204
+ */
205
+
206
+ function buildTree(preorder : number [], inorder : number []): TreeNode | null {
207
+ const n = preorder .length ;
208
+ if (n === 0 ) {
209
+ return null ;
210
+ }
211
+ const val = preorder [0 ];
212
+ const index = inorder .indexOf (val );
213
+ return new TreeNode (
214
+ val ,
215
+ buildTree (preorder .slice (1 , index + 1 ), inorder .slice (0 , index )),
216
+ buildTree (preorder .slice (index + 1 ), inorder .slice (index + 1 )),
217
+ );
218
+ }
219
+ ```
220
+
221
+ ### ** Rust**
222
+
223
+ ``` rust
224
+ // Definition for a binary tree node.
225
+ // #[derive(Debug, PartialEq, Eq)]
226
+ // pub struct TreeNode {
227
+ // pub val: i32,
228
+ // pub left: Option<Rc<RefCell<TreeNode>>>,
229
+ // pub right: Option<Rc<RefCell<TreeNode>>>,
230
+ // }
231
+ //
232
+ // impl TreeNode {
233
+ // #[inline]
234
+ // pub fn new(val: i32) -> Self {
235
+ // TreeNode {
236
+ // val,
237
+ // left: None,
238
+ // right: None
239
+ // }
240
+ // }
241
+ // }
242
+ use std :: rc :: Rc ;
243
+ use std :: cell :: RefCell ;
244
+ impl Solution {
245
+ fn to_tree (preorder : & [i32 ], inorder : & [i32 ]) -> Option <Rc <RefCell <TreeNode >>> {
246
+ if preorder . is_empty () {
247
+ return None ;
248
+ }
249
+ let val = preorder [0 ];
250
+ let index = inorder . iter (). position (| & v | v == val ). unwrap ();
251
+ Some (Rc :: new (RefCell :: new (TreeNode {
252
+ val ,
253
+ left : Self :: to_tree (& preorder [1 .. index + 1 ], & inorder [.. index ]),
254
+ right : Self :: to_tree (& preorder [index + 1 .. ], & inorder [index + 1 .. ]),
255
+ })))
256
+ }
257
+
258
+ pub fn build_tree (preorder : Vec <i32 >, inorder : Vec <i32 >) -> Option <Rc <RefCell <TreeNode >>> {
259
+ Self :: to_tree (& preorder [.. ], & inorder [.. ])
260
+ }
261
+ }
262
+ ```
263
+
189
264
### ** ...**
190
265
191
266
```
0 commit comments