2016-04-24 82 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個節點。其次,你的add方法不是遞歸的。您將root設置爲您的範圍內的最大值,因此通過while循環的第一次迭代總是以終止(返回)結束,因此add永遠不會遍歷樹的第二級以下。

希望這可以幫助你找到正確的方向。