2017-05-07 8 views
1

に異なる結果について声明をループそれは毎回異なる結果を出力して、私はループにprint文をしようとしています。前提は、私​​は0から99の乱数で埋まっているバイナリ検索ツリーを持っています。は、今日のJava

私はその後、ランダムなノードを選択し、このランダムなノードに根の長さを取得します。

私は上記の文を何度も繰り返す必要があるが、すべての私のループは、これまでに同じ答えを与えているか、無限ループ。

while(i!=10){ 
    System.out.println(bst.Pathlength(root, random_node)); 
    i++; 
} 

for (int i = 0;i< 10; i++){ 
    System.out.println(bst.Pathlength(root, random_node)); 
} 

while (true) { 
    int i = 0; 
    int j = 1000; 
    if (i != j) { 
     System.out.println(bst.Pathlength(root, random_node)); 
     i++; 
    }else if (i == j){ 
     break; 
    } 
} 

上記は私が試したループの選択です(同時にではありません)。 Pastebin link with full programは全体像のための完全なプログラムが含まれています。この上

任意のポインタは「現在、あなたはそれ故に、ループの各反復で同じインスタンスを渡している:)

答えて

2

なぜそれがあなたと同じ結果を毎回表示します素晴らしいことです今述べたように、ツリー内のすべてのノードを現在のノードから横断し、次に左に移動し、次に右に移動する必要があります。

inOrderメソッドを作成して、ツリーを横切ってサブツリーのデータを印刷することができます。

あなたがループについては予想通り、最初の二つは動作するはずです、しかし、最後のループが無限に常にループはあなたがそれを意味し、ループの各反復で0iをリセットしているのでう決して届きますjをループから抜け出すために使用します。これを解決するには、単にループ外にijという変数を宣言するだけです。 Tree Traversals

異なる種類。

+0

答えてくれてありがとうしかし、私は私自身の問題を解決することになりました。ランダムなノードセレクタをループの内側に移動するだけです。 – JimmyPop13

+0

@ JimmyPop13あなた自身の問題を解決してくれてうれしいですが、通常はツリー内にツリーを横断する一般的な方法があります。これにリンクを追加しました。既に実装されている一般的なアルゴリズムに従うのがよい方法です。 –