2014-02-17 52 views
0

到目前为止我做了我的二叉树,它可以添加节点你可以选择哪个父母你想添加一个子节点,但问题是每当我删除一个节点它删除它,有时它说空指针异常,当我显示我的节点它仍然存在。这是我的deletetion方法:二叉树删除说空指针

public void delete(Node node){ 
     if (node! =null) { 
      if(node.value.equals(nodeToDelete)) { 
       node=null; 
      } 
      delete(node.left); 
      delete(node.right); 
      } 
     } 
    } 

我已经定义我的节点,我的add方法,以及nodeToDelete是一个字符串和多数民众提前

+0

下一次你问,格式化你的代码,使它可读。我现在已经为你做了,但请在将来自己做。 – Zavior

+0

对不起,我只是用尽了时间 – user3262563

+0

'NPE'来自哪一行,它是一个单线程程序? – MrROY

回答

0

sometimes it say null pointer exception all.tnx。我认为您的NPE仅在您的node没有价值时才抛出。

你需要在这里检查你的代码,你是如何定义你的value

if(node.value.equals(nodeToDelete)) { 
0

问题是你删除你的节点,然后你尝试删除它的子节点。这会导致空指针异常。首先,您必须删除这些孩子,然后删除该节点。

我认为二叉树中的删除操作稍微复杂一些。你应该考虑3种不同的情况:

  • 的节点是叶
  • 节点有一个孩子
  • 节点有两个孩子

请阅读Wikipedia article about binary tree并尝试重新实现它。

0

当您第一次将节点设置为空然后访问此节点的某些部分时,NPE是静态可预见的 - 因此,首先删除这些子节点,然后将节点本身设置为空。