2016-10-10 36 views
1

私はBSTの再帰的な追加をしようとしています。 public addメソッドはint引数をとり、privateメソッドは同じintとNodeをとります。これは私がこれまでバイナリ検索ツリー再帰的な追加

public void add(int i) { 

    add(i, root); 

} 

private void add(int i, Node n) { 
    if (root==null){ 
     root=new Node(i); 
    } 

    if (i < n.element) { 
     if (n.left != null) { 
      add(i, n.left); 
     } else { 
      n.left = new Node(i); 
     } 
    } else if (i > n.element) { 
     if (n.right != null) { 
      add(i, n.right); 
     } else { 
      n.right = new Node(i); 
     } 
    } 
} 

私はconstanlyヌルポインタを得続けるが、同様のデバッグを試みたが、私が見ることができない私のロジックに欠陥が何かがあります持っているコードです。

+0

をそれはおそらくパラメータで 'N'の代わりに – Aaron

+0

バックステップを取る必要がありながら、あなたは' root'を参照方法かもしれない https://reprog.wordpress.com/2010/04/19/are-you-one-of-the-percent/ – Stephane

答えて

2

ツリーが空の場合(root = null)、新しいノードを正しく作成し、root変数に割り当てます。しかし、それはすべてそれがすべきことです。
したがって :

if (root==null){ 
    root=new Node(i); 
    return; // DONE!! 
} 

それとも、あなたがしたい場合:あなた `add`方法で

if (root==null){ 
    root=new Node(i); 
} 
else if (i < n.element) { 
.... 
+0

それはトリックをしたと思う、私の印刷方法の私の使用法間違っていたので、私はどちらがトリックをしたのか分からないが、あなたに誇りを持っている! – NaughtySloth

関連する問題