2016-10-10 133 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