【发布时间】:2019-12-12 01:14:09
【问题描述】:
我正在学习如何在二叉搜索树中找到中序继任者 我了解到:
-
如果节点的右子树不为NULL,则后继节点位于右子树中。跟随。
转到右子树,返回右子树中键值最小的节点。
-
如果节点的右子树为NULL,则后继者是祖先之一。跟随。
使用父指针向上移动,直到看到一个节点是其父节点的左子节点。这样一个节点的父节点就是后继节点。
我不明白为什么如果右子树不为空,我们必须返回具有最小值的节点,如果右子树为空,我们必须找到其父节点的左子节点。并且该节点的父节点是后继节点。
请帮助..这是这个算法的关键点。
struct node * inOrderSuccessor(struct node *root, struct node *n)
{
// step 1 of the above algorithm
if( n->right != NULL )
return minValue(n->right);
// step 2 of the above algorithm
struct node *p = n->parent;
while(p != NULL && n == p->right)
{
n = p;
p = p->parent;
}
return p;
}
【问题讨论】:
标签: c