2016-12-01 8 views
0

ツリー内の各リーフに数値を割り当てようとしています。例えばツリー内のリーフに異なる値を割り当てる

我々は6葉を持つ木を持っている場合、私は私がされている、私のコードがうまく動作しない理由を私は知らない葉は0〜5

に番号を持つようにしたいですでも、再帰的な方法で何度も試みていますが、私は何かが欠けていそうです。..

public class Node { 

    int index; 
    int id; 
    Node left; 
    Node right; 

    // Constructor and setters/getters. 

    public static void num(Node n) { 

    int ini=0; 
    if(n==null) 
    { 

    } 
    if(n.isLeaf()) 
    { 
     n.index=ini; 
     ini++; 
    } 
    if(!n.isLeaf()) 
    { 
     num(n.getleft()); 
     num(n.getRight()); 
    } 
} 

はまた、私は、ツリー内の葉の数を取得したいです。例えば

、私たちの木が

        1 
           / \ 
           2  3 
          /\ /\ 
          6 9 8 10 
         /
          4 
    public static int numberChild(Node n, int count) 

{ 
    if (n == null) { 
     return 0; 
    } 
    if (n.getleft() == null && n.getRight() == null) { 
     return 1 + count; 
    } else { 
     int lc = numberChild(n.getleft(), count); 
     int rc = numberChild(n.getRight(), lc); 
     return rc; 
    } 

} 

のように見える私の葉、2の代わりに、4の間違った番号を与えます!

ヘルプ

+0

あなたのツリーはどのような方法でソートされていますか、ラベルは任意の順序で割り当てられますか? –

+0

ツリーはソートされていませんが、葉は、左から右にインデックスを作成します。つまり、逆ポーランド表記が必要です。 – Zok

+0

あなたのコードにバグが見つからない。あなたはデバッガを試すことができますか? –

答えて

1

ちょうど今、それは:)うまく機能

public void num(Node n) { 


     if(n.getleft()!=null)num(n.getleft()); 
     if(n.getRight()!=null)num(n.getRight()); 
     if(n.isLeaf()) 
     { 
      n.assignIndex(ini); 
      ini++; 
     } 

} 

私の割り当てインデックスコードで間違っていたものを考え出しました。ありがとうございます

+0

感謝をしたいです。だからあなたは 'ini'をローカル変数ではなくフィールドとして宣言しましたか? –

+0

ええ、私が関数のローカル変数として持っていたときに、再帰を呼び出すたびに0に再初期化されると思います。 – Zok

1

n == nullの場合は、0を返します。countを返すか、以前の数が失われます。あなたの例では、6ノードのために葉をカウントすると、その下の4ノードから正しく1が得られます。次に、存在しない右の子にはnumberChild()を呼び出し、0を返します。したがって、6ノードで返されるカウントは1ではなく0になります。

編集:値を葉に割り当てるには、ノードを数えたり、再帰的なメソッドにカウントを渡して、現在のノードの左に何桁のリーフがすでに番号付けされているかを知ったり、更新されたカウントを返すというアイディアです。 numメソッドは、numberChildメソッドの別のバージョンと同じようになり、リーフノードに新しいインデックスが割り当てられて拡張されます。

+0

ええ、私はちょうどそのことをうんざりし、自分のコードを変更しました。 今、私は左から右に各葉に値を割り当てるのが難しいです。上記ツリーの 、私は共有のためのそのnode4.index = 0 node9.index = 1 node8.index = 2 node9.index = 3つの – Zok

関連する問題