inorder と preorder から postorder を作成したいという質問がありますが、ツリーの再構築を使用したくありません。これを再帰的にのみ行いたいのです。私はこれをコーディングし、現時点では、ツリーの右側の一部を事前順序で持っています(事前順序の最初の文字はルートです。これを順序どおりに見つけます。左側と右側があり、再帰性が右側に変換されます) 、しかし、ツリーの左側に問題があります。私はこれを行う考えがありません。誰かが私に提案やコードを教えてもらえますか? 助けてください :)
質問する
753 次
1 に答える
0
public static String a(String pre, String in, int start, int end) {
char c = pre.charAt(start); //first char in preorder is root
int ix = find(pre, in, c); // if we find this char in inorder translation we know where is left and right side of tree
stack += c;
if (start == 0 && flaga == true) {
left = pre.substring(1, ix + 1);
right = pre.substring(ix + 1, end);
flaga = false;
return a(right, in, 0, end);
}
String reverse = new StringBuffer(stos).reverse().toString();
//stack to see
// System.out.println("STACK " + stos);
if (start < right.length()-1) {
return a(right, in, start + 1, end - 1);
}
return "";
}
public static int find(String a, String b, char c) {
int b_l = b.length();
for (int i = 0; i < b_l; ++i)
if (b.charAt(i) == c)
return i;
return -1;
最初のテスト: String pre = "FBADCEGIH"; 文字列 inorder = "ABCDEFGHI"; 答えは次のとおりです: //A、C、E、D、B、H、I、G、F 私の問題はツリーの左側にあります。これを正しく行う方法がわかりません。よくわかりません私のコードは、予約注文と注文注文のすべての状況で機能します。
于 2012-05-29T20:43:20.483 に答える