1. 题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
2. 解题思路
- 前序遍历的第一个元素一定是树的根结点
- 在中序遍历中找到此节点,左边是左子树,右边是右子树
- 根据左右子树的长度,再次划分两个序列,进一步递归

3. 代码
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class Node { constructor(value, left = null, right = null) { this.value = value this.left = left this.right = right } }
function reConstruct(preorder, inorder) { if (!preorder.length || !inorder.length) { return }
let node = new Node(preorder[0])
let i = 0 for (; i < inorder.length; ++i) { if (inorder[i] === preorder[0]) { break } }
node.left = reConstruct(preorder.slice(1, i + 1), inorder.slice(0, i)) node.right = reConstruct(preorder.slice(i + 1), inorder.slice(i + 1))
return node }
const preArr = [1, 2, 4, 7, 3, 5, 6, 8] const midArr = [4, 7, 2, 1, 5, 3, 8, 6] const binTree = reConstruct(preArr, midArr) console.log(binTree)
|