我需要帮助来理解这个面试问题:
问:找到一种算法以在二叉搜索树中找到给定节点的下一个节点(例如,中序后继),其中每个节点都有到其父节点的链接。
父母是指有序的前任还是直接父母?如何创建一棵树,其中节点具有指向根节点或有序前驱的链接?任何帮助理解数据结构和下面的程序将不胜感激......
解决方案(如表格中所示)如下所示:
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;
}