🍞环境:牛客的编译环境
🍰语言:JavaScript
☕️难点:
1⃣️一直理解错了array的slice方法,slice方法可以返回一个新的数组,包含从 start 到 end (不包括end元素)。
2⃣️递归没出口,刚开始自己思考的逻辑没问题,但是很少写递归的程序,导致我的递归没有出口,也就没有输出结果。
🍊题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
🌟解题思路:
根据前序遍历的特点,可以知道第一个元素一定是根元素;再根据中序遍历的特点,可以通过indexof找到根元素的位置,根元素左边的元素都是左子树,右边的元素则是右子树。根据这个规律,利用递归的方法可以得到最里层的元素,然后回溯返回。
🥝代码:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function reConstructBinaryTree(pre, vin) {
// write code here
if (pre.length > 0) {
let tn = new TreeNode(pre[0]);
let index = vin.indexOf(pre[0]);
tn.left = reConstructBinaryTree(pre.slice(1, index + 1), vin.slice(0, index));
tn.right = reConstructBinaryTree(pre.slice(index + 1), vin.slice(index + 1));
return tn;
} else {
return null;
}
}