このインタビューの質問を理解するのに助けが必要です:
Q: 各ノードがその親へのリンクを持つ二分探索木で、特定のノードの次のノード (たとえば、順序どおりの後続ノード) を見つけるアルゴリズムを見つけてください。
親とは、順序どおりの先行者を意味しますか、それとも直接の親を意味しますか? ノードがルートノードまたは順序付けされた先行ノードへのリンクを持つツリーを作成するにはどうすればよいでしょうか? 以下のデータ構造とプログラムを理解する上で助けになれば幸いです...
解決策(フォームに投稿されたとおり)を以下に示します。
public static TreeNode inorderSucc(TreeNode e) {
if (e != null) {
TreeNode p;
// Found right children -> return 1st inorder node on right
if (e.parent == null || e.right != null) {
p = leftMostChild(e.right);
} else {
// Go up until we’re on left instead of right (case 2b)
while ((p = e.parent) != null) {
if (p.left == e) {
break;
}
e = p;
}
}
return p;
}
return null;
}
public static TreeNode leftMostChild(TreeNode e) {
if (e == null) return null;
while (e.left != null) e = e.left;
return e;
}