青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

#include <iostream>

using namespace std;

template
<typename Type>
struct SBNode{
    
int   size;
    Type  key;
    SBNode
<Type>* lchild, *rchild;
    SBNode(){}
    SBNode( SBNode
<Type>*l, SBNode<Type>*r, int s, Type k ):
        lchild(l), rchild(r), size(s), key(k) {}
};

template
<typename Type>
class SBTree{
    
private:
        SBNode
<Type>* root;
        SBNode
<Type>* _null;
        
        
void left_rotate ( SBNode<Type>*& root );
        
void right_rotate( SBNode<Type>*& root );
        
void maintain( SBNode<Type>*& root, bool style );
        
void insert( SBNode<Type>*& root, Type key );
        
void erase ( SBNode<Type>*& root, Type key );
        
void clear ( SBNode<Type>* root );
        
void travel( SBNode<Type>* root );
        
    
public:
        SBTree ();
        
~SBTree();
        
        
void insert( Type key );       //  插入元素 
        void erase ( Type key );       //  刪除元素
        Type get_rank( int k  );       //  獲得第 k 個(gè)元素 
        Type get_min();                //  獲得最小元素
        Type get_max();                //  獲得最大元素
        void clear();                  //  清空 
        void travel();                 //  遍歷 
};

template
<typename Type>
Type SBTree
<Type>::get_rank( int k ){
    SBNode
<Type>* tmp= root;
    
for( ;; ){
        
if( tmp->lchild->size> k ) tmp= tmp->lchild;
        
else if( k> tmp->lchild->size ){
            k
-= tmp->lchild->size+ 1;
            tmp
= tmp->rchild; }
        
else break;}
    
return tmp->key;
}

template
<typename Type>
void SBTree<Type>::clear( SBNode<Type>* root ){
    
if( root!= _null ){
        clear( root
->lchild );
        clear( root
->rchild );
        delete root; }
}

template
<typename Type>
void SBTree<Type>::clear(){
    clear(root); delete _null; }

template
<typename Type>
void SBTree<Type>::travel( SBNode<Type>* root ){
    
if( root!= _null ){
        travel( root
->lchild );
        cout 
<< root->key << "  ";
        travel( root
->rchild ); }
}

template
<typename Type>
void SBTree<Type>::travel(){
    travel( root ); }

template
<typename Type>
Type SBTree
<Type>::get_min(){
    
if( root== _null ) return Type();
    SBNode
<Type>* tmp= root;
    
while( tmp->lchild!= _null ) tmp= tmp->lchild;
    
return tmp->key;
}

template
<typename Type>
Type SBTree
<Type>::get_max(){
    
if( root== _null ) return Type();
    SBNode
<Type>* tmp= root;
    
while( tmp->rchild!= _null ) tmp= tmp->rchild;
    
return tmp->key;
}

template
<typename Type>
void SBTree<Type>::erase( Type key ){
    erase( root, key ); }

template
<typename Type>
void SBTree<Type>::erase( SBNode<Type>*& root, Type key ){
    
if( root== _null ) return;    root->size--;
    
if( root->key== key ){
        SBNode
<Type>* tmp;
        
if( root->lchild!= _null && root->rchild== _null ){
            tmp
= root;  root= tmp->lchild; delete tmp; }
        
else if( root->lchild== _null && root->rchild== _null ){
            tmp
= root; root= _null; delete tmp; }
        
else {
            tmp
= root->rchild; 
            
while( tmp->lchild!= _null ) tmp= tmp->lchild;
            root
->key= tmp->key; erase( root->rchild, tmp->key );}
    }
    
else if( key< root->key ) erase( root->lchild, key );
    
else erase( root->rchild, key );
}

template
<typename Type>
void SBTree<Type>::insert( SBNode<Type>*& root, Type key ){
    
if( root== _null ){
     root
= new SBNode<Type>( _null, _null, 1, key ); return; }
    root
->size++;
    
if( key< root->key ) insert( root->lchild, key );
    
else                 insert( root->rchild, key );
    maintain( root, key
>= root->key );
}

template
<typename Type>
void SBTree<Type>::insert( Type key ){
    insert( root, key ); }

template
<typename Type>
SBTree
<Type>::SBTree(){
    _null
= new SBNode<Type>();
    root
= _null; 
    root
->lchild= root->rchild= _null;
    root
->size= 0;
}

template
<typename Type>
SBTree
<Type>::~SBTree(){
    clear();
}

template
<typename Type>
void SBTree<Type>::left_rotate( SBNode<Type>*& root ){
    SBNode
<Type>* tmp= root->rchild;
    root
->rchild= tmp->lchild;  tmp->lchild= root;
    tmp
->size= root->size;
    root
->size= root->lchild->size+ root->rchild->size+ 1;
    root
= tmp;
}

template
<typename Type>
void SBTree<Type>::right_rotate( SBNode<Type>*& root ){
    SBNode
<Type>* tmp= root->lchild;
    root
->lchild= tmp->rchild;  tmp->rchild= root;
    tmp
->size= root->size;
    root
->size= root->lchild->size+ root->rchild->size+ 1;
    root
= tmp;
}

template
<typename Type>
void SBTree<Type>::maintain( SBNode<Type>*& root, bool style ){
    
if( root== _null ) return;
    
if!style ){
        
if( root->lchild->lchild->size> root->rchild->size )
        right_rotate( root );
        
else if( root->lchild->rchild->size> root->rchild->size ){
            left_rotate( root
->lchild );
            right_rotate( root );
           }
else return;
        }
    
else {
        
if( root->rchild->rchild->size> root->lchild->size )
        left_rotate( root );
        
else if( root->rchild->lchild->size> root->lchild->size ){
            right_rotate( root
->rchild );
            left_rotate( root ); 
        }
else return;
    }
   maintain(root
->lchild, false);  maintain(root->rchild, true);
   maintain(root, 
false);          maintain(root, true);
}
posted on 2009-04-12 11:10 Darren 閱讀(1115) 評(píng)論(5)  編輯 收藏 引用

評(píng)論:
# re: Size Balanced Tree C++模板實(shí)現(xiàn) 2009-04-16 22:58 | 打醬油
傳說(shuō)中手寫(xiě)的平衡樹(shù)?Orz...  回復(fù)  更多評(píng)論
  
# re: Size Balanced Tree C++模板實(shí)現(xiàn) 2009-04-17 09:05 | Darren
@打醬油
你這 傳說(shuō)中 這個(gè)詞的運(yùn)用真是爐火純青啊!!  回復(fù)  更多評(píng)論
  
# re: Size Balanced Tree C++模板實(shí)現(xiàn) 2009-04-17 13:15 | 打醬油
@Darren
【傳說(shuō)中】就是【理論上】的意思^_^  回復(fù)  更多評(píng)論
  
# re: Size Balanced Tree C++模板實(shí)現(xiàn)[未登錄](méi) 2011-02-28 21:21 | frank
_null->left=_null;
_null->right=_null;
這個(gè)得有。  回復(fù)  更多評(píng)論
  
# re: Size Balanced Tree C++模板實(shí)現(xiàn) 2012-03-15 21:48 | Indeed
ORZ!!!!!!!!!學(xué)習(xí)了!  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜精品| 欧美一区三区三区高中清蜜桃| 亚洲素人在线| 亚洲一区免费在线观看| 亚洲免费在线视频| 亚洲欧美成人在线| 久久福利精品| 男同欧美伦乱| 亚洲黄色在线视频| 亚洲欧洲日韩综合二区| 亚洲视频高清| 亚洲国产精品视频| 亚洲欧美变态国产另类| 亚洲欧美在线一区二区| 久久久精品日韩欧美| 欧美激情视频一区二区三区不卡| 欧美三级第一页| 在线电影欧美日韩一区二区私密| 亚洲美女在线视频| 久久精品国产第一区二区三区| 欧美成年人视频网站| 宅男精品导航| 欧美1区2区| 国产在线一区二区三区四区| 99re66热这里只有精品3直播| 欧美专区一区二区三区| 亚洲区在线播放| 久久国产精品久久国产精品| 欧美日韩亚洲一区二区三区四区| 激情综合在线| 欧美亚洲一区二区在线观看| 亚洲国产一区二区三区在线播 | 欧美伊人久久久久久午夜久久久久 | 亚洲黄色一区二区三区| 亚洲性感美女99在线| 美日韩精品视频免费看| 国产欧美日韩一级| 日韩午夜在线电影| 久热综合在线亚洲精品| 亚洲视频一区二区在线观看| 免费久久精品视频| 国产在线播放一区二区三区| 亚洲欧美日韩国产成人精品影院| 亚洲国产成人久久综合| 久久久久久亚洲精品杨幂换脸| 国产美女诱惑一区二区| 亚洲夜间福利| 一本大道av伊人久久综合| 欧美国产免费| 亚洲免费观看| 亚洲靠逼com| 欧美精品在线视频观看| 99精品免费| 99re成人精品视频| 欧美日韩ab| 亚洲欧美国产高清| 亚洲欧美日本在线| 国产精品露脸自拍| 午夜精品久久久久久久99樱桃| 亚洲午夜小视频| 国产精品专区h在线观看| 欧美自拍偷拍| 久久久久久久一区二区| 亚洲国产三级网| 久久美女性网| 激情一区二区| 蜜臀av国产精品久久久久| 久久久天天操| 亚洲精品乱码久久久久久蜜桃麻豆| 久久综合久久综合久久| 久久视频在线看| 亚洲精品美女久久7777777| 亚洲国产成人高清精品| 欧美精品在线免费播放| 亚洲欧美制服中文字幕| 欧美一区2区三区4区公司二百| 国内成人自拍视频| 欧美成人一区二区在线| 欧美精品一区在线播放| 午夜精品久久久久久久久久久久久 | 国产一区二区三区高清| 久久综合久色欧美综合狠狠| 美日韩丰满少妇在线观看| 亚洲视频欧美视频| 亚洲欧美日韩精品久久| 亚洲大黄网站| 宅男精品视频| 亚洲国产日韩综合一区| 正在播放亚洲一区| 国产尤物精品| 亚洲人成高清| 国产性天天综合网| 91久久午夜| 狠狠狠色丁香婷婷综合激情| 亚洲欧洲视频在线| 国产亚洲欧美一区二区三区| 亚洲黄一区二区| 国内自拍一区| av成人黄色| 亚洲电影毛片| 亚洲欧美在线网| 一本久道久久综合婷婷鲸鱼| 欧美在线3区| 亚洲午夜久久久久久久久电影网| 久久国产一区二区| 一区二区三区视频在线播放| 久久天堂av综合合色| 欧美一区二区三区在线视频 | 亚洲综合色激情五月| 狼狼综合久久久久综合网| 亚洲欧美中文字幕| 欧美精品成人91久久久久久久| 久久久久免费观看| 国产精品免费福利| 亚洲精品少妇30p| 亚洲国产欧美一区二区三区久久 | 中文欧美在线视频| 久久精品久久99精品久久| 亚洲免费一区二区| 欧美日韩免费一区| 欧美国产一区视频在线观看| 国产亚洲综合性久久久影院| 中国亚洲黄色| 亚洲一区二区在线看| 欧美三级视频在线播放| 亚洲精品国精品久久99热一| 亚洲日本中文| 欧美成人亚洲| 亚洲第一福利社区| 亚洲人成艺术| 欧美激情网站在线观看| 亚洲人成精品久久久久| 亚洲理论电影网| 欧美电影在线| 亚洲精品国产精品国自产在线| 亚洲另类视频| 欧美日韩免费看| 亚洲一区二区在| 欧美综合国产精品久久丁香| 国产在线视频欧美| 久久免费精品视频| 欧美激情按摩| 一区二区动漫| 国产欧美日韩另类一区| 欧美在线一二三区| 久久中文字幕导航| 亚洲精品一二| 欧美三级黄美女| 亚洲欧美日韩精品在线| 久久久久国产精品一区| 一色屋精品亚洲香蕉网站| 美乳少妇欧美精品| 一本久道久久久| 久久人人97超碰精品888| 亚洲国产精品久久久久| 欧美高清不卡| 亚洲图片自拍偷拍| 久久精品人人| 亚洲精品五月天| 国产精品夜色7777狼人 | 欧美成人dvd在线视频| 亚洲欧洲一区二区三区在线观看| 亚洲天堂av图片| 国产专区综合网| 欧美日韩大陆在线| 久久成人在线| 亚洲免费观看在线观看| 久久精品视频在线免费观看| 最新中文字幕一区二区三区| 国产精品久久久久久久久久直播| 欧美中文字幕| 99国产精品视频免费观看| 久久精品日产第一区二区| 亚洲精品欧洲| 国产在线拍偷自揄拍精品| 亚洲免费影视第一页| 国产一区二区精品| 欧美日韩亚洲三区| 久久另类ts人妖一区二区| 99re66热这里只有精品4| 老司机一区二区三区| 亚洲调教视频在线观看| 欧美在线看片a免费观看| 91久久午夜| 国产情人节一区| 欧美国产第一页| 久久精品亚洲国产奇米99| 中国女人久久久| 日韩视频―中文字幕| 亚洲国产1区| 裸体歌舞表演一区二区| 亚洲欧美中文日韩在线| 99ri日韩精品视频| 91久久在线| 在线日本欧美| 黄色成人在线观看| 国产三区精品| 国产乱码精品一区二区三区五月婷 | 伊大人香蕉综合8在线视| 国产日韩欧美制服另类|