【发布时间】:2015-11-10 23:05:46
【问题描述】:
正如标题所暗示的,如果我们在二叉搜索树 (BST) 中有节点 x,并且我们知道 x.successor 而不是 x.parent 的信息,我们也知道 x.left 和 x.right。如何根据以上信息计算x.parent。
我决定分两种情况来分析:(根高度为0)
- 如果 x 没有右孩子,x.successor 的高度必须小于 x。换言之,x.successor 位于 x 的“上层”。
- 如果 x 有右孩子,x.successor 的高度必须大于 x。这意味着 x.successor 处于 x 的“较低级别”。
对于第一种情况,我们可以有以下伪代码。
y = x.succ
if x.right == NIL
z = y.left
while x != z
y = z;
z = z.right
return z
如何处理第二种情况?如果x.right != NIL 会发生什么?
15
6 18
3 7 17 19
2 4 13 20
9
如何获取节点 18 和 19 的父节点,因为最右边的节点 20 没有后继节点,所以它会返回 NIL。
【问题讨论】:
标签: algorithm data-structures binary-search-tree