この使い古された質問に関する多くの質問を見てきましたが、null のチェック中に NPE を取得する理由についての答えが見つかりません。私自身と別のパートナーは、単純にローテーションを使用して自己均衡バイナリ検索を構築しているため、新しいルートに反対側に配置する必要がある子がある場合は、一時ノードを保存する必要があります。
ここで、nextRoots の左または右の子が null かどうかを確認し、そうでない場合は、将来の配置のために一時ノードに保存します。
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 チェックがこの問題を回避する方法であるという印象を受けていますが、それ自体が問題を引き起こしています。さらにコードが必要な場合はお知らせください。