重建二叉树
Posted 前端你好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重建二叉树相关的知识,希望对你有一定的参考价值。
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。输入的前序和中序遍历序列都不含重复数字。
例子:前序遍历序列为[1,2,4,5,3],中序遍历序列为[4,2,5,1,3]
分析:根据前序遍历序列可知1是根节点,那么在中序遍历序列中1前面的数都为左子树,后面的数为右子树,所以4,2,5属于左子树,3属于右子树。同样,在前序遍历序列中根节点1后面的3个数就是3个左子树节点,再后面的所有数都是右子树节点。根据相同的方法可以分别构建左、右子树。因此这个题可以使用递归去完成。
解:
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
var buildTree = function(preorder, inorder) {
if (!preorder.length || !inorder.length) {
return null;
}
const rootVal = preorder[0];
const node = new TreeNode(rootVal);
let i; // i有两个含义,一个是根节点在中序遍历结果中的下标,另一个是当前左子树的节点个数
for (i = 0; i < inorder.length; ++i) {
if (inorder[i] === rootVal) {
break;
}
}
node.left = buildTree(preorder.slice(1, i + 1), inorder.slice(0, i));
node.right = buildTree(preorder.slice(i + 1), inorder.slice(i + 1));
return node;
};
以上是关于重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章