2017-03-09 70 views
0

可以comeone請幫助我。我試圖添加元素到二叉搜索樹,但它不起作用。它似乎是它只添加第一個數字作爲根元素,然後它不再添加任何東西。這是代碼。將元素添加到二叉搜索樹

主要方法:

public static void main(String[] args) { 
    Scanner kb = new Scanner(System.in); 
    int a = 1; 
    int v, b, c; 
    TNode1 j = new TNode1(0, null, null); 
    BST1 s = new BST1(); 

    while (a == 1) { 
     System.out.println("1.Add numeber\n2.Print\n3.Stop"); 
     v = kb.nextInt(); 

     switch (v) { 
     case 1: 
      System.out.println("Give a number"); 
      b = kb.nextInt(); 
      s.insert(b); 
      break; 

     case 2: 
      s.Print(); 
      break; 

     case 3: 
      break; 
     } 
    } 
} 

在BST1類:

public void insert(int x) { 
    if (root == null) { 
     root = new TNode1(x, null, null); 
     lastFound = root; 
    } else { 
     lastFound = root.insert(x); 
    } 
} 

在TNODE類:

protected int element; 
protected TNode1 left; 
protected TNode1 right; 

public TNode1 insert(int x) { 
    if (x < element) { 
     if (left == null) { 
      left = new TNode1(x, null, null); 
      return left; 
     } else 
      return left.insert(x); 
    } else if (x > element) { 
     if (right == null) { 
      right = new TNode1(x, null, null); 
      return right; 
     } else 
      return right.insert(x); 
    } else 
     return this; 
} 

這裏是打印方法:

在BST1類:

public void Print() 
{ 
     root.Print(); 
     System.out.println("."); 
} 

在TNode1類:

public void Print() 
{ 
     System.out.print("("); 
     if (left != null) 
     { 
      left.Print(); 
      System.out.print(this); 
     } 
     if (right != null) 
     { 
      right.Print(); 
      System.out.print(")"); 
     } 
} 
+0

關於第一個注意事項,如果'BST1'是'TNode1'周圍的包裝類,那麼'insert(int x)'應該在'BST1'類中執行,而不是在'TNode1'中。另外,'BST'和'Node'似乎是我的好名字 –

+0

我還沒有嘗試過,但它看起來像工作正常。你是怎麼知道它不再添加任何東西的?你的'Print()'方法是否正確實現?你也可以顯示'Print()'方法嗎?! –

+0

感謝您的回答!我將打印方法添加到原始帖子中。 @AnandUndavia – Hemuli

回答

0

的一個問題是停止不會停止循環。在停止的情況下,你需要設置a = 1;

這是好事,叫s.insert,這將創建root,如果它不存在,並調用root.insert(x)否則。

insert對於TNode似乎是正確的。您可能遇到的問題可能與print方法有關。建議:

public void print(String path, TNode1 node) { 
    System.out.println(path + ": " + node.getElement()); 
    if (node.hasLeft()) print(path + "L", node.getLeft()); 
    if (node.hasRight()) print(path + "R", node.getRight()); 
} 

請注意,我在這裏使用了大量的輔助方法。如果你沒有它們,那麼你將需要實施它們。您可以撥打打印這樣的:

s.print("", s.getRoot()); 

編輯:這個問題已被編輯

後,我們有關於print方法的詳細信息。這是代碼:

public void Print() 
{ 
     System.out.print("("); 
     if (left != null) 
     { 
      left.Print(); 
      System.out.print(this); 
     } 
     if (right != null) 
     { 
      right.Print(); 
      System.out.print(")"); 
     } 
} 

問題:

  • 而不是System.out.print(this)你需要System.out.print(this.getElement())printint,而不是this
  • 在你不print元素的右手邊,請看看我上面的print,它應該激勵你