LeetCode 105 106 medium
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
参考:公众号 labuladong
记录的原因,是没有加 base case
导致报错。
var buildTree = function(preorder, inorder) {
// base case 很关键,不加会报错
if(preorder.length === 0 || inorder.length === 0){
return null
}
let rootValue = preorder[0]
let indexInInorder = inorder.indexOf(rootValue)
let leftLength = indexInInorder
let rightLength = inorder.length - (indexInInorder + 1)
let root = new TreeNode(rootValue)
root.left = buildTree(preorder.slice(1, leftLength + 1), inorder.slice(0, indexInInorder))
root.right = buildTree(preorder.slice(preorder.length - rightLength), inorder.slice(indexInInorder + 1))
return root
};
var buildTree = function(inorder, postorder) {
// 注意 base case
if(inorder.length === 0 || postorder.length === 0){
return null
}
let rootValue = postorder[postorder.length - 1]
let indexInInorder = inorder.indexOf(rootValue)
let leftLength = indexInInorder
let root = new TreeNode(rootValue)
root.left = buildTree(inorder.slice(0, leftLength), postorder.slice(0, leftLength))
root.right = buildTree(inorder.slice(indexInInorder + 1), postorder.slice(leftLength, postorder.length - 1))
return root
};