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

#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 個元素 
        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) 評論(5)  編輯 收藏 引用

評論:
# re: Size Balanced Tree C++模板實現 2009-04-16 22:58 | 打醬油
傳說中手寫的平衡樹?Orz...  回復  更多評論
  
# re: Size Balanced Tree C++模板實現 2009-04-17 09:05 | Darren
@打醬油
你這 傳說中 這個詞的運用真是爐火純青啊!!  回復  更多評論
  
# re: Size Balanced Tree C++模板實現 2009-04-17 13:15 | 打醬油
@Darren
【傳說中】就是【理論上】的意思^_^  回復  更多評論
  
# re: Size Balanced Tree C++模板實現[未登錄] 2011-02-28 21:21 | frank
_null->left=_null;
_null->right=_null;
這個得有。  回復  更多評論
  
# re: Size Balanced Tree C++模板實現 2012-03-15 21:48 | Indeed
ORZ!!!!!!!!!學習了!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区三区的电影| 欧美中文在线字幕| 国产精品盗摄一区二区三区| 蜜臀91精品一区二区三区| 久久久五月婷婷| 久久一区二区三区四区| 免费观看成人| 欧美日韩一区国产| 国产精品视频免费观看| 好看的av在线不卡观看| 久久精品一区蜜桃臀影院| 亚洲高清久久久| 伊甸园精品99久久久久久| 国产精品久久久久久久久免费樱桃 | 亚洲免费观看高清完整版在线观看熊| 亚洲国产精品久久久久秋霞蜜臀| 夜夜精品视频一区二区| 亚洲一区二区高清| 欧美不卡一卡二卡免费版| 亚洲小说春色综合另类电影| 欧美激情一级片一区二区| 亚洲自拍三区| 国产亚洲欧美另类一区二区三区| 99这里只有久久精品视频| 久久久久久综合| 欧美一区二区三区另类 | 欧美国产精品久久| 欧美性猛交视频| 亚洲午夜激情| 亚洲日本中文字幕区| 久久精品日产第一区二区| 国产欧美一级| 久久蜜桃av一区精品变态类天堂| 午夜精品亚洲一区二区三区嫩草| 久久国产福利| 欧美在线视频免费播放| 黄色av一区| 亚洲第一福利社区| 麻豆freexxxx性91精品| 亚洲欧美另类国产| 国产日韩精品一区| 久久精品99久久香蕉国产色戒 | 9l国产精品久久久久麻豆| 美女福利精品视频| 欧美精品在线一区二区| 午夜精品www| 久久免费视频网| 中文欧美在线视频| 久久综合狠狠综合久久综合88| 日韩视频精品在线| 久久精品国产99国产精品澳门| 亚洲最新视频在线播放| 在线看片成人| 久久福利精品| 午夜精品三级视频福利| 欧美 日韩 国产一区二区在线视频| 一区二区三区产品免费精品久久75| 欧美一区二区私人影院日本 | 久久久久久亚洲精品中文字幕| 欧美黑人国产人伦爽爽爽| 久久久视频精品| 国产欧美日韩亚洲一区二区三区| 欧美成人一区二区三区在线观看| 欧美日韩另类综合| 亚洲高清一区二| 亚洲国产精品第一区二区| 香蕉精品999视频一区二区| 欧美在线综合| 欧美日韩成人一区二区| 亚洲精品久久久久久久久久久久 | 久久成人18免费观看| 欧美极品aⅴ影院| 欧美国产三级| 亚洲中字在线| 伊人蜜桃色噜噜激情综合| 亚洲欧美日韩一区二区三区在线| 亚洲第一福利社区| 另类人畜视频在线| 欧美黄网免费在线观看| 激情六月综合| 欧美理论片在线观看| 亚洲精品欧洲| 欧美在线观看你懂的| 国产日产高清欧美一区二区三区| 亚洲欧美伊人| 欧美电影在线观看完整版| 亚洲伦理自拍| 国产伦精品一区二区三区在线观看 | 91久久精品www人人做人人爽 | 免费视频一区| 亚洲麻豆av| 麻豆av一区二区三区| 亚洲一区二区三区777| 韩国三级电影久久久久久| 欧美日韩精品系列| 久久精品二区三区| 99视频精品全部免费在线| 久久青草欧美一区二区三区| 日韩视频在线观看| 精品96久久久久久中文字幕无| 亚洲欧美激情在线视频| 久久人人爽爽爽人久久久| 亚洲精品一二三| 国产精品一级| 欧美激情亚洲视频| 国产欧美日韩精品a在线观看| 欧美成人在线免费视频| 国产精品久久久久久久久久妞妞| 久久亚洲捆绑美女| 欧美天天在线| 欧美激情亚洲激情| 国产日韩亚洲欧美精品| 日韩视频精品| 亚洲欧洲另类国产综合| 亚洲欧美日韩系列| 亚洲一区二区欧美日韩| 欧美精品日韩一本| 免费日韩av片| 韩日视频一区| 欧美一区二区三区四区视频| 亚洲一区二区三区免费在线观看| 免费在线国产精品| 久久久国产亚洲精品| 欧美成熟视频| 久久爱另类一区二区小说| 欧美不卡三区| 久久精品国产欧美亚洲人人爽| 久久精品国产69国产精品亚洲| 夜夜嗨av色综合久久久综合网| 午夜欧美大尺度福利影院在线看 | 国产精品www.| 亚洲免费视频中文字幕| 最新国产乱人伦偷精品免费网站| 精品1区2区3区4区| 久久精品国产第一区二区三区| 西瓜成人精品人成网站| 欧美性猛交xxxx免费看久久久| 亚洲久久在线| 一本大道av伊人久久综合| 欧美极品在线观看| 亚洲看片一区| 亚洲一区亚洲二区| 欧美性大战久久久久| 亚洲无线一线二线三线区别av| 亚洲在线一区二区| 国产麻豆精品视频| 久久成人国产| 嫩模写真一区二区三区三州| 亚洲福利视频二区| 欧美高清视频在线播放| 亚洲另类一区二区| 午夜精品久久久久久久99水蜜桃| 国产免费观看久久黄| 久久精品国产免费| 欧美国产一区在线| 亚洲性夜色噜噜噜7777| 国产精品欧美日韩一区二区| 午夜视频一区二区| 欧美黄污视频| 欧美亚洲免费高清在线观看| 国内精品视频在线播放| 免费在线国产精品| 在线一区欧美| 久久久亚洲国产美女国产盗摄| 亚洲欧洲日本国产| 欧美国产日韩二区| 亚洲国产一区在线| 亚洲一区自拍| 国产亚洲毛片| 欧美成人tv| 亚洲综合视频网| 亚洲二区精品| 欧美影片第一页| 亚洲精品美女在线观看播放| 欧美日韩亚洲综合一区| 性色av一区二区三区在线观看| 美女网站在线免费欧美精品| 9人人澡人人爽人人精品| 国产欧美日韩亚洲| 欧美电影免费观看网站| 午夜精品婷婷| 亚洲精选一区| 免费欧美电影| 久久精品国产精品亚洲精品| 亚洲国产99| 国产精品影视天天线| 欧美极品在线观看| 久久久国产午夜精品| 一本色道久久88综合日韩精品| 女女同性精品视频| 欧美在线影院在线视频| 99re6这里只有精品| 韩国精品久久久999| 欧美亚洲成人精品| 欧美喷潮久久久xxxxx| 久热成人在线视频| 久久久精品一区二区三区| 亚洲欧美日韩一区在线| 一本大道久久a久久精二百| 亚洲国产精品成人一区二区|