2010-12-10 12 views
3

ちょっと、私は、バイナリツリーの文字列表現を取り、その中からツリーを作成するプログラムを書いています。コードは私には完全に意味をなさないが、それはまだそれが何をすべきかをしない。みんな、ありがとう。BinTreeからBinTreeへの括弧の表現

(((()B(C))D(E))F(G))J(()K((L)M(T)))

private static BinTree<String> findRoot(String s){ 
String tree = s; 
    int i = 0; 
    int count = 0; 
    String root; 
    if(tree.equalsIgnoreCase("()")){ 
     return null; 
    } 
    if(tree.length()==3){ 
     return new BinTree<String>(Character.toString(tree.charAt(1))); 
    } 
    while(i<tree.length()){ 
     if(tree.charAt(i)=='('){ 
      count++; 
     } 
     if(tree.charAt(i)==')'){ 
      count--; 
      if(count==0){ 
       i++; 
       root = Character.toString(tree.charAt(i)); 
       return new BinTree<String>(root, findRoot(tree.substring(1, i-1)), findRoot(tree.substring(i+1))); 
      } 
     } 
     i++; 
    } 
    return null; 
} 
+0

ツリー構造(左)はルート(右)ですか? – shoebox639

+0

そうだと思います。 –

答えて

1

スタートのデバッグfindRoot()をコールするたびにsの値を検査することによって:ここではいくつかのコードです。コードは、あなたのsubstring()パラメータにオフ・バイ・ワンのエラーがあるという気持ちがあるという点を除いて、よく見えます。

+0

あなたの編集の入力が終わったのはなぜですか? –

+0

@TreverMA Accidental。一定。 – marcog

0

あなたがあなたのルートを見つけたら、ルートの左のすべてと右のすべてについて、findRootを再帰的に呼び出します。とにかくやりたいこと。左の子の呼び出しはその周りのかっこを削除しますが、右の子は呼び出されません。文字列の長さが3であることを確認して葉ノードを見つけると、括弧をつけたままにしておきます。だから左の子コールはfindRoot(tree.substring(0, i)でなければなりません。

0

申し訳ありませんが、私の担当者は直接コメントすることはできませんので、私はこの回答を通じて質問してください。 は

(((()B(C))D(E))F(G))J(()K((L)M(T)))

例えば文字列が入力されます - バイナリツリーの表現。 もしそうなら、単語の形で少しだけツリーを提供できますか?ちょうど2つの葉がそのトリックをするだろう。

関連する問題