Size Balanced Tree
来源:互联网 发布:seo专员是做什么的 编辑:程序博客网 时间:2024/05/17 03:19
二叉查找树,定义为兄弟节点儿子的size小于等于自己的size
陈启峰的论文
主要内部操作是Maintain,在内部数据改变时用(删除时可以用简单删除节省时间),用于调整为新的SBT
一些Maintain相关代码:
- struct Node{
- Node *lc,*rc;
- Node *p;
- int size,key;
- Node(int,int);
- }NIL = Node(0,0);
- Node::Node(int _k,int _sz = 1){
- lc = rc = p = &NIL;
- key = _k;
- size = _sz;
- }
- typedef Node *SB;
- /********************************************************
- SB find(SB T,int ke);
- //找到key为ke的节点
- SB find(SB T,int ke){
- if( T == &NIL || T->key == ke)return T;
- if( T->key > ke)return find(T->lc,ke);
- else return find(T->rc,ke);
- }
- ********************************************************/
- void Rro(SB&T){
- SB tmp = T->lc;
- T->lc = tmp->rc;
- tmp->rc = T;
- // tmp->p = T->p ;
- // T->p = tmp;
- // T->lc->p = T;
- tmp->size = T->size;
- T->size = T->lc->size+T->rc->size+1;T = tmp;
- }
- void Lro(SB&T){
- SB tmp = T->rc;
- T->rc =tmp->lc;
- tmp->lc = T;
- // tmp->p = T->p;
- // T->p = tmp;
- // T->lc->p = T;
- tmp->size = T->size;
- T->size = T->lc->size+T->rc->size+1;T = tmp;
- }
- void Maintain(SB&T,bool flag){
- if(flag == false){
- if(T->lc->lc->size > T->rc->size){
- Rro(T);
- }
- else if( T->lc->rc->size > T->rc->size){
- Lro(T->lc);
- Rro(T);
- }
- else return;
- }
- else{
- if(T->rc->rc->size > T->lc->size){
- Lro(T);
- }
- else if(T->rc->lc->size > T->lc->size){
- Rro(T->rc);
- Lro(T);
- }
- else return;
- }
- Maintain(T->lc,false);
- Maintain(T->rc,true);
- Maintain(T,false);
- Maintain(T,true);
- }
其中bool变量flag = false 表示 T左侧子树过大
以后有机会再写
题目:二叉查找树的大部分题目,等等
- Size Balanced Tree
- Size Balanced Tree
- 陈启峰 Size Balanced Tree
- Size Balanced Tree
- SBT(Size balanced tree)
- Size Balanced Tree模板
- size balanced tree
- Size Balanced Tree
- [LOG] Size Balanced Tree
- Size Balanced Tree(SBT)
- 数据结构-SBT(Size Balanced Tree)
- SBT模版(Size Balanced Tree)
- 【算法笔记】Size Balanced Tree
- [转载] SBT(Size Balanced Tree)
- Size Balanced Tree Sbt模板
- SB tree (Size Balanced Tree)
- 陈启峰 Size Balanced Tree (程序)
- sbt-size balanced tree学习笔记
- SQL查询(二)提升
- 分享软件实习成果
- linux命令名字由来--整理
- 嵌入式开发FAQ
- Struts 之旅 - 重复提交 token
- Size Balanced Tree
- 技术发展的道路究竟应该是怎样的?
- SQL查询(三)技巧
- 今天是妈妈的生日。
- IHTMLDocument3接口类成员
- 跟随文本框的DIV
- Eclipse 中Template 的使用
- 简单的SSH整合登录注册
- mysql数据库的操作总结