Let * be an associative binary operator, and let a be a field maintained in each node of a red-black tree. Suppose that we want to include in each node x an additional field f such that f[x] = a[x1] * a[x2] * ··· * a[xm], where x1, x2,..., xm is the inorder listing of nodes in the subtree rooted at x. Show that the f fields can be properly updated in O(1) time after a rotation. Modify your argument slightly to show that the size fields in order-statistic trees can be maintained in O(1) time per rotation.
1)容易得到不变式 f(x) = f(left[x])*a[x]*f(right[x])]
2)在一次反转过程中,无非是a,b,r三个子树的调整,对于三个子树的f域不需要调整,因为不影响他们内部的顺序,
3)对于求B的f域, f(B) = f(b)*a[B]*f(r)
4)求A的f域f(A) = f(a)*a[A]*f(B)
以上以left-rotate为例,right-roate类似
B A
/ \ -->/ \
A ra B
a b b r
红黑树节点字段更新
本文探讨了在红黑树中维护一个额外字段f的方法,该字段存储从根到每个节点路径上的所有a值的累积结果。通过保持不变式f(x)=f(left[x])*a[x]*f(right[x]),文章详细说明了如何在旋转操作中高效更新这些值,并扩展到顺序统计树的大小字段。
1126

被折叠的 条评论
为什么被折叠?



