2016-10-10 129 views
1

我想爲我的BST做一個遞歸添加。 public add方法接受一個int參數,私有方法採用相同的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

在你的'add'方法你參考'root'雖然它也許應該是參數'N'代替 – Aaron

+0

退一步可能是這樣的 https://reprog.wordpress.com/2010/04/19/are-you-one-of-the-10-percent/ – Stephane

回答

2

當您的樹爲空(root = null)時,您可以正確地創建一個新節點並將其分配給您的root變量。但這就是它應該做的。
因此:

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

或者,如果你想:

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

認爲它做了竅門,doe我的使用打印方法也是錯誤的,所以我不確定是哪一種做法,但是對你很贊! – NaughtySloth