Construct Binary Tree from Preorder and Inorder Traversal(JS解答)
题意:通过前序遍历和中序遍历的结果数组,构建二叉树
思路:
1:preorder[0]即二叉树的root节点
2:查找preorder[0]在inorder中的位置,假设这个位置为cur,我们可知,在inorder数组中,cur左边的数都在root的左子树中,cur右边的数都在右子树中
3:递归执行,构建二叉树
function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
var node = helper(0,0,inorder.length-1,preorder,inorder);
return node;
};
function helper(preStart:number,start:number,end:number,preorder: number[], inorder: number[]):TreeNode | null{
if(preStart > preorder.length-1 || start > end) return null;
var node:TreeNode = new TreeNode(preorder[preStart]);
var cur:number = 0;
for(var i = 0; i < inorder.length; i++){
if(inorder[i] == preorder[preStart]){
cur = i; //得到cur值
}
}
node.left = helper(preStart+1,start,cur-1,preorder,inorder);
node.right = helper(preStart+cur-start+1,cur+1,end,preorder,inorder);
return node;
}