2016-04-24 24 views
1

私の仕事はランダムに生成されたキー(0-14012891)を挿入する手順を示すことです。値が小さい場合は左に挿入し、値が大きい場合は右に挿入します。これは私が今まで持っていたものであり、私は非常に固執しています。どんな種類のヘルプ/ポインタも非常に高く評価されます。また、ルート14012891がランダムに生成された新しい番号が追加された後、私もこれを取り除くのですか?ありがとうございました!バイナリ検索ツリー再帰的エラーと操作のトレース

だから、
Node root; 

public void addNode(int key, String name) { 

Node newNode = new Node(key, name); 
if(root == null) { 
    root = newNode; 
} else { 
    Node focusNode = root; 
    Node parent; 
    while(true) { 
     parent = focusNode; 
     if(key < focusNode.key) { 
      focusNode = focusNode.leftChild; 
      if(focusNode == null) { 
       parent.leftChild = newNode; 
       return; 
      } 
      else { 
       focusNode = focusNode.rightChild; 
       if (focusNode == null) { 
        parent.rightChild = newNode; 
        return; 
       } 
      } 
     } 
    } 
} 
} 
public void preOrderTraverseTree(Node focusNode) { 
    if (focusNode!=null) { 
     System.out.println(focusNode); 

     preOrderTraverseTree(focusNode.leftChild); 

     preOrderTraverseTree(focusNode.rightChild); 
    } 
} 

public static void main (String[] args) { 
    Random rand = new Random(); 
for (int j = 0; j<10; j++) 
{ 
int pick = rand.nextInt(100); 

    CourseWork2 newTree = new CourseWork2(); 
    newTree.addNode(14012891," Root "); 
    newTree.addNode(pick, ""); 

    newTree.preOrderTraverseTree(newTree.root); 
} 
} 

public class Node { 
int key; 
String name; 

Node leftChild; 
Node rightChild; 

Node(int key, String name) { 

    this.key = key; 

    this.name = name; 

} 
public String toString() { 
    return name + " " + key; 
} 
} 
} 

答えて

0

、あなたはそれにはノードを持っていないだろう持ってforループを通じて新しいツリーに各反復を作成しているすべての最初の。ルートノードと0〜100の乱数を追加します。したがって、ルートノードと乱数を10回プリントアウトすることが期待されます。言い換えれば、あなたのツリーは決して2つのノードより大きくなることはありません。

第2に、addメソッドは再帰的ではありません。あなたの範囲内の最大値になるようにルートを設定しているので、whileループを通る最初の反復は常に終了(リターン)で終わります。したがって、追加はツリーの2番目のレベルの下を横切ることはありません。

これは正しい方向に進むのに役立ちます。

関連する問題