//左旋右旋也需要维护区间性质
void leftRotate(Tnode* root,Tnode x){
Tnode y = x->r;
x->r = y->l;
//y->l = x;
if(y->l!=tnil)
(y->l)->p = x;
y->p = x->p;
if(x==*root){
*root = y;
}else{
if(x==(x->p)->l){
(x->p)->l = y;
}else if(x==(x->p)->r){
(x->p)->r = y;
}
}
y->l = x;
x->p = y;
//维护区间性质只需要处理x.max和y.max即可
x->max = Max(x->tint.high,x->l->max,x->r->max);
y->max = Max(y->tint.high,y->l->max,y->r->max);
}
void rightRotate(Tnode* root,Tnode y){
Tnode x = y->l;
y->l = x->r;
if(x->r!=tnil){
构造区间树。以及区间树查找算法实现。C语言实现
最新推荐文章于 2022-05-23 13:09:14 发布
本文详细介绍了如何用C语言实现区间树,并展示了插入节点和区间查找的算法实现,同时包括左旋、右旋操作以保持树的平衡。通过对节点的更新维护了区间最大值的正确性。
摘要由CSDN通过智能技术生成