2012-04-17 4 views
0

Red Black Treeをjavaで実装するように求められましたが、どうしたのかは分かりません。 r/bツリー実装のために誰かが私のノードクラスにコメントしてくれれば本当にいいですね。ここで行く:Javaでr/bツリーのノードクラスを作成する方法についてのアドバイスが必要

public class RBTnode { 

public RBTnode(int key, RBTnode left, RBTnode right) { 
    /* this is the constructor for a root node */ 
    color = 0; 
    parent = null; 
    key = this.key; 
    left = this.left; 
    right = this.right; 
} 

public RBTnode(int key, RBTnode left, RBTnode right, RBTnode parent, int color) { 
    key = this.key; 
    color = this.color; 
    left = this.left; 
    right = this.right; 
    parent = this.parent; 

} 

int color; // 0 black, 1 red 
int key; 
RBTnode parent; 
RBTnode left; 
RBTnode right; 

}

+0

あなたのコードはなんですか?それは働いていますか?問題はありますか? ... あなたの質問は何ですか? – Kai

+0

2つのコンストラクタを作成することをお勧めしますか?1つのルートしか持たないので、明らかに最初のコンストラクタが必要です。また、親ノードと子ノードをRBTノードとして割り当てることは正しいですか?私はそれがまだ動作するかどうかは分かりませんが、私はRBTnodeオブジェクトを含むarraylistを作成したいと思っています。別のクラスではメソッド(insert、traverse treeなど)をtogehterすることです。 – John

+2

はおそらく 'parent = this.parent;'などを回りますか? :) – zapl

答えて

1

私はRBツリーを自分で書かれていないが、私は今、それらについて学んでいます。私が聞いたことから、調整が必要なようです。

あなたはRBの木であることをRBツリーためには従う必要があり、特定のルールがあります。

  • は、すべてのノードが

  • REDまたはBLACKルートノードは常にBLACK
    です
  • 新しいノードは常にREDです
  • 赤いノードの両方の子はBLACKです。
  • ルートからリーフ、またはヌルの子へのすべてのパスには、同じ数のブラックノードが含まれている必要があります。

私は、新しいノードをいつもREDに初期化しようとしているので、2番目のコンストラクタは必要ないと言われています。

+0

私はそれらについても学んでいますので、バイナリ検索ツリーがr/bツリーになるためのすべての要件を知っていますが、そうですね、それは2つのコンストラクタではあまりにも多いと思います。 – John

+0

最初のコンストラクタを2番目に呼び出します。それはあなたがやっていることと無関係な、良いコードの基本です。 – Kevin