题目
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回
- leetcode链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/submissions/
思路
- 找到对应的左子树前序遍历序列、左子树中序遍历序列和右子树前序遍历序列、右子树中序遍历序列,进行递归,根结点为前序序列的第一个元素。
官方解法
/**
* 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(preorder, inorder) {
if (!preorder.length) return null
if (preorder.length === 1) return new TreeNode(preorder[0])
const rootNum = preorder.shift()
const inorderRootIndex = inorder.indexOf(rootNum)
const inorderLeft = inorder.slice(0, inorderRootIndex)
const inorderRight = inorder.slice(inorderRootIndex + 1)
const preorderLeft = preorder.slice(0, inorderLeft.length)
const preorderRight = preorder.slice(inorderLeft.length)
const root = new TreeNode(rootNum)
root.left = buildTree(preorderLeft, inorderLeft)
root.right = buildTree(preorderRight, inorderRight)
return root
};