gpt4 book ai didi

java - 从中序和先序遍历重建二叉树

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:08 24 4
gpt4 key购买 nike

我编写了以下代码,用于从中序遍历和先序遍历构建树。它对我来说看起来是正确的,但它产生的最终树与构建它的树没有相同的有序输出。谁能帮我找出这个函数的缺陷?

public btree makeTree(int[] preorder, int[] inorder,  int left,int right)
{
if(left > right)
return null;

if(preIndex >= preorder.length)
return null;

btree tree = new btree(preorder[preIndex]);
preIndex++;

int i=0;
for(i=left; i<= right;i++)
{
if(inorder[i]==tree.value)
break;

}


tree.left = makeTree(preorder, inorder,left, i-1);
tree.right = makeTree(preorder, inorder,i+1, right );

return tree;

}

注意:preIndex 是在函数外声明的static。

最佳答案

in = {1,3,2,5}; pre = {2,1,5,3};

我在“手工”构建树时遇到了一些困难。 pre表明2一定是根,in表明{1,3}是左子树的节点,{5 是右子树:

      2
/ \
/ \
{1,3} {5}

但是知道这一点,3 不可能是 pre 中的最后一个元素,因为它显然是左子树的一个元素并且我们有右子树。这些树的有效预序遍历是 {2,1,3,5}{2,3,1,5}。但是 {2,1,5,3} 是不可能的。

也许错误不在这个方法中,而在你创建中序和先序遍历的算法中。或者,可能是您随机选择了 in[]pre[] 的值?

关于java - 从中序和先序遍历重建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com