平衡红黑树(状态机)与扩张区间树

  • 状态机:分类讨论,为了递归与美观,把重复的去掉
  • 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

posted @ 2022-10-09 10:11  clfire  阅读(26)  评论(0编辑  收藏  举报