将每个节点的'parent'存储在红黑树中,简化了哪些操作?
Which operations are simplified by storing the 'parent' of each node in a red-black tree?
一些红黑树实现为每个节点存储一个父节点。
哪些常见操作 (插入、删除、pop_min、pop_max、迭代...等) 可以使用此额外信息进行简化?
parent 有助于执行任何可能需要升级树的操作,包括迭代和删除(包括 pop min/max)。
寻找下一个祖先(可能是 grandparent 或更远)似乎是一个 O(log n) 操作,有或没有 parent 指针,但它们并不相同,鉴于大多数节点位于树的底部,具有 parent 意味着在典型情况下只需要向上一步(并且该步骤是已知的),而没有 parent 你必须在大多数情况下,大部分树都会下台。基本上有一个 parent 指针可以反转祖先搜索问题。
从实现方面(而不是算法)我还发现使用 parent 插入更容易 - 我更喜欢将插入和删除的重新平衡实现为迭代循环而不是递归尾调用。
一些红黑树实现为每个节点存储一个父节点。
哪些常见操作 (插入、删除、pop_min、pop_max、迭代...等) 可以使用此额外信息进行简化?
parent 有助于执行任何可能需要升级树的操作,包括迭代和删除(包括 pop min/max)。
寻找下一个祖先(可能是 grandparent 或更远)似乎是一个 O(log n) 操作,有或没有 parent 指针,但它们并不相同,鉴于大多数节点位于树的底部,具有 parent 意味着在典型情况下只需要向上一步(并且该步骤是已知的),而没有 parent 你必须在大多数情况下,大部分树都会下台。基本上有一个 parent 指针可以反转祖先搜索问题。
从实现方面(而不是算法)我还发现使用 parent 插入更容易 - 我更喜欢将插入和删除的重新平衡实现为迭代循环而不是递归尾调用。