我已经看过很多关于这个破旧问题的问题,但我无法找到答案,为什么我会在检查无效期间获得NPE。我自己和另一个伙伴正在简单地通过使用旋转来构建自平衡二进制搜索,因此如果新根有一个需要放在另一侧的子节点,我们需要存储一个临时节点。
在这里,我们检查nextRoots左或右子节点是否为空,如果不是,我们将它存储在临时节点中以供将来放置。
Node temp = null;
nextRoot = root.rightChild; // Set the next root
oldRoot = root; // Hold the old root
// If next roots left child is NOT null
// Lets store it and null it now
if (nextRoot.leftChild != null) // This check throws NPE, not nextRoot, just the nextRoot.leftChild
{
temp = nextRoot.leftChild;
nextRoot.leftChild = null;
}
我的印象是if检查应该是规避这个问题的方法,但它本身就是导致问题的原因。任何帮助将不胜感激,如果您需要更多代码,请告诉我。
答案 0 :(得分:3)
如果nextRoot.leftChild抛出NPE ... nextRoot为null。 尝试检查代码行为是否正确。 如果是......修改if如下:
if (nextRoot != null && nextRoot.leftChild != null)
答案 1 :(得分:2)
除nextRoot
nextRoot.leftChild
是否为空
if (nextRoot != null && nextRoot.leftChild != null)
如果您可以调试此代码,则很容易确定原因而不是在此处发布。
答案 2 :(得分:1)
您必须获取NPE,因为nextRoot被设置为null。请检查设置nextRoot的行。