【发布时间】:2018-01-11 16:51:20
【问题描述】:
一些红黑树实现为每个节点存储一个父节点。
哪些常见操作(插入、删除、pop_min、pop_max、迭代...等)可以使用这些额外信息进行简化?
【问题讨论】:
标签: algorithm binary-tree red-black-tree
一些红黑树实现为每个节点存储一个父节点。
哪些常见操作(插入、删除、pop_min、pop_max、迭代...等)可以使用这些额外信息进行简化?
【问题讨论】:
标签: algorithm binary-tree red-black-tree
有一个父节点可以帮助完成任何可能需要逐步提升树的操作,这些操作包括迭代和删除(包括弹出最小值/最大值)。
寻找下一个祖先(可能是祖父母或更远)似乎是一个 O(log n) 操作,有或没有父指针,但它们不一样,因为大多数节点都在底部有父级的树意味着在典型情况下只需要向上一步(并且该步骤是已知的),而在没有父级的情况下,在大多数情况下您必须向下移动大部分树。基本上,有一个父指针会反转祖先搜索问题。
从实现方面(而不是算法),我还发现使用父级插入更容易 - 我更喜欢将插入和删除的重新平衡实现为迭代循环而不是递归尾调用。
【讨论】: