题目说明
1 | 根据一棵树的前序遍历与中序遍历构造二叉树。 |
解题思路一
前序找根,中序分左右,递归即可。- 根为前序第一个值。
let root = new TreeNode(preorder[0]); - 找到根在中序中的位置
let rootIndex = inorder.indexOf(root.val); 左右分开。left为左中序,right为右中序,preLeft为左前序,preRight为右
1
2
3
4let left = inorder.slice(0, rootIndex);
let right = inorder.slice(rootIndex + 1, inorder.length);
let preLeft = preorder.slice(1, left.length + 1);
let preRight = preorder.slice(left.length + 1);找到左右各自的前中序列。即可递归找根了。
代码实现一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {number[]} preorder
* @param {number[]} inorder
* @return {TreeNode}
*/
var buildTree = function buildTree(preorder, inorder) {
if (preorder.length == 0) {
return null;
}
let root = new TreeNode(preorder[0]);
if (preorder.length == 1) {
return root;
}
let rootIndex = inorder.indexOf(root.val);
let left = inorder.slice(0, rootIndex);
let right = inorder.slice(rootIndex + 1, inorder.length);
let preLeft = preorder.slice(1, left.length + 1);
let preRight = preorder.slice(left.length + 1);
left.length && (root.left = buildTree(preLeft, left));
right.length && (root.right = buildTree(preRight, right));
return root;
}