重建二叉树

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;};

以上是关于重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章

4.重建二叉树

[编程题]重建二叉树

《剑指offer》— JavaScript重建二叉树

重建二叉树

重建二叉树-剑指Offer

用前序和中序重建二叉树 python