私の割り当ての一部として、私は表現ツリーが与えられており、O(n)ランタイムでイン・フィックスに変換する必要があります。 "((1 V(2 H(3 V 4)))H(5 V 6))" には、このツリーを変換する 例えば、与えられたツリーのポストオーダーデータの文字列を作る
。 私はそれをそのままインフィックスに変換する方法を考えることができなかったので、最初にそれをポストフィックスとイン・フィックスに変換することを考えました。 (もっと良い方法があれば教えてください)。
私の問題は、ツリーをポストオーダーに変換することです。 私は次のことを試してみました:
private String treeToPost(Node node, String post) {
if (node != null) {
treeToPost(node.left, post);
treeToPost(node.right, post);
post = post + node.data.getName();
}
return post;
}
それだけで、それは旅の最後のノードを節約するために今、私は二つ目は、私はということで、最初のものは、それが動作しないで、この方法には二つの問題を、持っていますそのたびに新しい文字列を作成する必要があるため、O(n)で実行されるかどうかはわかりません。 ここでこの問題の解決策を見つけましたが、StringBuilderを使用しましたが、これは使用できません。データを保存するための文字列を作ることを考えましたが、ツリーのサイズがわからないので、必要な配列のサイズを知ることはできません。 ありがとうございました:)
treeToPost(node.left、post)とtreeToPost(node.right、post)の結果を保存しないため、最後のノードのみを保存するアルゴリズム – dehasi
各ノードの値をinorder-traversalとして挿入することができます。それらはツリー内でインオーダーして表示され、1つのレベルを上げるたびに1つのレベル(葉に向かう)と閉じ括弧を降ろすたびにオープニングブラケットを挿入します。そして、それはあなたのツリーの中立表現をどのように作成するかということです。もちろん、これは、それらの内部に単一の言葉でブラケットを導入するだろうが、必要ならば修正するのがそれほど難しくない。 – Paul