11-14.2 P105 从前序与中序遍历序列构造二叉树
题目描述
给定两个整数数组 preorder
和 inorder
,其中 preorder
是二叉树的先序遍历, inorder
是同一棵树的中序遍历,请构造二叉树并返回其根节点。
示例 1:
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]
题解
递归法:由前序遍历确定根,由中序遍历确定左子树和右子树元素,直到子树没有元素。
前序遍历第一个结点是根,确定根在中序遍历的位置,根左边的元素为左子树结点,右同样。根据子树元素个数,由前序与中序遍历序列确定子树的前序序列和中序序列,依次递归,直到子树没有元素。
代码
var buildTree = function(preorder,inorder){
const n = preorder.length
if(n === 0){
return null
}
const leftSize = inorder.indexOf(preorder[0])
const pre1 = preorder.slice(1,leftSize+1)
const pre2 = preorder.slice(leftSize+1)
const in1 = inorder.slice(0,leftSize)
const in2 = inorder.slice(leftSize+1)
const left = buildTree(pre1,in1)
const right = buildTree(pre2,in2)
return new TreeNode(preorder[0],left,right)
}