Java 从顺序和前序遍历重构二叉树

Java 从顺序和前序遍历重构二叉树,java,binary-tree,traversal,inorder,Java,Binary Tree,Traversal,Inorder,我已经编写了以下代码,用于从其顺序和前序遍历构造树。在我看来,它看起来是正确的,但最终生成的树的顺序输出与构建它所依据的顺序输出不同。有人能帮我找到这个函数中的缺陷吗 public btree makeTree(int[] preorder, int[] inorder, int left,int right) { if(left > right) return null; if(preIndex >= preorder.length)

我已经编写了以下代码,用于从其顺序和前序遍历构造树。在我看来,它看起来是正确的,但最终生成的树的顺序输出与构建它所依据的顺序输出不同。有人能帮我找到这个函数中的缺陷吗

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;

}
publicbtree生成树(int[]预序,int[]顺序,int左,int右)
{
如果(左>右)
返回null;
if(预索引>=预订单长度)
返回null;
B树=新的B树(预排序[预索引]);
preIndex++;
int i=0;
for(i=左;i
我“手工”构造树有一些困难。
pre
显示
2
必须是根,
in
显示{1,3}是左子树的节点,
{5}
是右子树:

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


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

Ehm.。这到底有什么好处?:)没什么。这是我试图回答的一个有趣的问题。我想这没什么害处。@Javaguru——乍一看——但另一方面,人们可以通过存储索引和预排序遍历的结果来序列化二叉树。哦,是的,这是真的。有用的见解。@Sid,还有一个相关的问题:—来自索引和postorder遍历。不同的输入,但可能很有趣……废话!我想这是对的。我不敢相信我浪费了这么多时间,以为我一直都对递归有误解。谢谢。
      2
     / \
    /   \
  {1,3} {5}