インオーダートラバーサルとプレオーダートラバーサルからツリーを構築するために、次のコードを記述しました。私には正しいように見えますが、結果として得られる最終的なツリーには、それが構築されたものと同じ順序の出力がありません。誰かが私がこの関数の欠陥を見つけるのを手伝ってもらえますか?
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は、関数の外部で宣言された静的なものです。