#105. Construct Binary Tree from Preorder and Inorder Traversal
这道题是用先序(根左右)遍历和中序(左根右)遍历来构造树,这棵二叉树的根节点很好确定,就是先序的第一项。因为题目中说这棵树没有重复的项,因此根据这个根元素在中序遍历中的位置,可以分别确定先序和中序数组中左右子树的下标。然后再递归。
var buildTree = function(preorder, inorder) {
if(preorder.length == 0 || inorder.length == 0) {
return null;
}
let res = new TreeNode(preorder[0]);
const i = inorder.indexOf(preorder[0]);
res.left = buildTree(preorder.slice(1,i+1),inorder.slice(0,i));
res.right = buildTree(preorder.slice(i+1),inorder.slice(i+1));
return res;
};
#106. Construct Binary Tree from Inorder and Postorder Traversal
这道题根据中序(左根右)遍历和后序(左右根)遍历。根据后序的最后一个元素可以确定整棵树的根节点。由于整棵树中没有重复的项,所以再根据根节点的位置确定左右子树的下标即可。
var buildTree = function(inorder, postorder) {
if(inorder.length == 0 || postorder.length == 0) {
return null;
}
let res = new TreeNode(postorder.pop());
const i = inorder.indexOf(res.val);
res.left = buildTree(inorder.slice(0,i),postorder.slice(0,i));
res.right = buildTree(inorder.slice(i+1),postorder.slice(i,postorder.length));
return res;
};