2016-05-07 8 views
0

私は単純なBSTを実装し、要素を順番に印刷しようとしています。私は誤った出力を得ていて、デバッガを実行しているようで、何がうまくいかないのか分からない。これは、addinorderメソッドを使用したBSTの実装です。Javaでエラーが発生するBSTの実装

public class BST { 
    private Node root; 

    private class Node{ 
     int data; 
     Node left; 
     Node right; 

     public Node(int data){ 
      this.data = data; 
     } 
    } 

    public BST(int item){ 
     root = new Node(item); 
    } 

    public void add(int item){ 
     root = add(item, root); 
    } 

    private Node add(int item, Node curr){ 

     if(curr == null){ 
      curr = new Node(item); 
      return curr; 
     } 
     if(item < curr.data) curr.left = add(item, curr.left); 
     if(item > curr.data) curr.right = add(item, curr.left); 
     return curr; 

    } 
    public void inorder(){ 

     inorder(root); 
    } 

    private void inorder(Node curr){ 
     if(curr == null) return; 
     inorder(curr.left); 
     System.out.print(curr.data + " "); 
     inorder(curr.right); 
    } 

これは呼び出し元のクライアントです。

public class Solution { 

    public static void main(String[] args) { 

     BST bst = new BST(12); 
     //bst.add(12); 
     bst.add(7); 
     bst.add(16); 
     bst.add(3); 
     bst.add(9); 
     bst.add(13); 
     bst.add(19); 
     bst.inorder(); 
     //bst.printLevelByLevel(); 
    } 
} 

これは私が得ている出力です。

3 19 7 3 19 12 3 19 7 3 19 
Process finished with exit code 0 

なぜ同じデータを複数回読み取っているのか分かりません。どんな助けもありがたい。

+0

'if(item> curr.data)'の行にあなたのタイプミスを確認してください。 –

+0

これは、残念です。 – Clockwork

+0

信じ難い、私の頭の中でデバッガに頭を叩いています。ありがとう、トン。 – Clockwork

答えて

1

add()メソッドにエラーがあります。ここ

マイナーエラー:

if (item < curr.data) curr.left = add(item, curr.left); 
if (item > curr.data) curr.right = add(item, curr.left); 

が本当にする必要があります。また

if (item < curr.data) curr.left = add(item, curr.left); 
if (item > curr.data) curr.right = add(item, curr.right); 

、私は別の潜在的な問題を参照してください。挿入しようとしている値が現在のノードの値と等しいケースを処理する必要があります。したがって、条件は次のようにする必要があります。

if(item <= curr.data) curr.left = add(item, curr.left); 

そうでないと、再帰的な操作は行われず、新しいノードは追加されません。

希望すると便利です。

関連する問題