【发布时间】:2023-10-21 06:31:01
【问题描述】:
我编写了以下代码,用于从其中序和前序遍历构造一棵树。它对我来说看起来是正确的,但它产生的最终树与构建它的树没有相同的顺序输出。谁能帮我找出这个函数的缺陷?
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 是在函数外声明的静态变量。
【问题讨论】:
-
Ehm.. 这到底有什么用? :)
-
没什么。这是我试图回答的一个有趣的问题。我想这没什么坏处。
-
@Javaguru - academic 乍一看 - 但另一方面,可以通过存储中序和前序遍历的结果来序列化二叉树。
-
哦,是的,这是真的。有用的见解。
-
@Sid,关于 SO 还有一个相关问题:Construct a tree - 来自 inorder 和 postorder 遍历。不同的输入,但可能很有趣......
标签: java binary-tree traversal inorder