leetcode105.从前序与中序遍历序列构造二叉树
leetcode105.从前序与中序遍历序列构造二叉树
题目
给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。
用例
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
Input: preorder = [-1], inorder = [-1]
Output: [-1]
求解
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number[]} preorder
* @param {number[]} inorder
* @return {TreeNode}
*/
var buildTree = function(preorder, inorder) {
//递归构建
return tree(0,preorder.length-1,0,inorder.length-1,preorder, inorder)
function tree(pre_left,pre_right,in_left,in_right,preorder,inorder){
if(in_left>in_right){
return null
}
let root = new TreeNode()
root.val = preorder[pre_left]
let in_mid = 0
for(let i = in_left;i<=in_right;i++){
if(preorder[pre_left]==inorder[i]){
in_mid = i
break
}
}
root.left = tree(pre_left+1,pre_left+(in_mid-in_left),in_left,in_mid-1,preorder,inorder)
root.right = tree(pre_left+(in_mid-in_left)+1,pre_right,in_mid+1,in_right,preorder,inorder)
return root
}
};

浙公网安备 33010602011771号