平衡红黑树(状态机)与扩张区间树
- 状态机:分类讨论,为了递归与美观,把重复的去掉
- due to 二叉树不保证平衡,here comes Red-Black tree——每条路黑高相同,lmax<2lmin
- 类似还有AVLT(1.44lgn,但维护代价大)
红黑树的插入(只用到分类讨论)
- ?递归导致栈溢出吗
- 二叉树平常插入
INSERT(T,z) //还要维护.p,.color
x=T.root
y=x.p
while(x!=T.NIL)
y=x
if(x.val<z.ins)
x=x.right
else x=x.left
z.p=y
if(y==NIL) T.root=z //逼事多
if(y.val<z.val) y.right=z
else y.left=z
维护left,right,color
- 从插入点开始,每次父节点与子节点同为红色,变色旋转小游戏*1,要保证根节点往下bh不变
红黑树的删除
- 0/1个长度>1子树,delete
- 2个长度>1子树,从节点少情况入手,
根A
A-子:A-left,A-rihgt
...
叶节点(l1,...,lm)(r1,...,rn)
l1<...<...<lm<r1<...<...<rn!
r1为根或lm为根
根r1/lm
叶节点(l1,...,lm)(r2,...,rn)/(l1,...,lm-1)(r1,...,rn)
- 推理小游戏*2
扩张(充分不必要):f(n)=g(f(n->left),f(n->right),O(lgn)
- f.size=f.left.size+f.right.size
- 扩张充分的例外:OS-RANK(T,x)
r+=r.left.size+1
while(x!=T.root)
if(x==x.p.right) //漏了
r+=x.p.left.size+1
x=x.p
return r
区间树
- 先维护max,min
- 思路1:分情况讨论并交化为状态机
INTERVAL-SEARCH//能不能自己设计一个算法a
愿偿少年泪,犹趁未老时!
本文来自博客园,作者:clfire,转载请注明原文链接:https://www.cnblogs.com/sky1water/p/16771126.html