HappyTree的专栏

心态决定人生

许玉亮ID:HappyTree
32956次访问,排名3339好友0人,关注者0
计算机软件行业,爱好乒乓球
HappyTree的文章
原创 71 篇
翻译 0 篇
转载 28 篇
评论 31 篇
HappyTree的公告
生于赣南,长于乡野,逐于学途,蜗居都市。少时苦读,但未成材;及入大学,懵懂四年。误学地理,却喜远足。及脱苦海,幸中硕士,始触电脑;三年猛醒,方得糊口之技。闲时喜乒乓,不得其法。书无所不读,不求甚解。闲静少言,不慕荣利。胸无点墨,心无城府。做事待人皆认真,往往吃亏,亦不后悔。
最近评论
QQ5460QQ:老兄,搞错了,编译通过,感觉非常捧!
QQ5460QQ:老兄,这个程序你运行过了没有,在vs.net 2005下面,怎么就死掉了.
vvukqr:WoW Gold
icbm:oracle 10g有了精简的客户端,称为instantclient。
复制到机器上,加两个环境变量就可以了用了。
很方便。大小为30M,oracle官方网站有下载的。
lynx1111:写得不错。支持!
请参考: http://www.mydwbi.com/forums/show/3.page
文章分类
收藏
    相册
    精彩博客
    C++的罗浮宫
    Cookbook
    云风的BLOG
    周星星
    孟岩
    旁观者 - 郑昀
    许式伟的专栏
    负暄琐话
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 二叉树系列之四:AVL树收藏

    新一篇: 一个后台运行程序的简单设计 | 旧一篇: 二叉树系列之三:红黑树

    AVL树是一种特殊的二叉搜索树,与红黑树相比,其平均性能略低,但最差性能要好于红黑树。

    其实现也主要在于插入和删除之后的调整。完整实现如下:

    #ifndef _AVL_TREE_H_
    #define _AVL_TREE_H_

    #include 
    "BSTree.h"

    template 
    <class T>
    class AVLTree : public BSTree<T>
    {
    public:
        AVLTree(T data 
    = T()) : BSTree(data) { }
        
    virtual ~AVLTree() { }

    public:
        
    void insert(T data)
        
    {
            BSTree
    <T>::insert(data); 

            
    while (avlnode_ != BTNode<T>::nil())
            
    {
                avlnode_
    ->factor_ += (avlnode_->data_ > data) ? MORE : LESS;

                
    if (avlnode_->factor_ == LOW) balanceLeft(avlnode_);
                
    else if (avlnode_->factor_ == HIGH) balanceRight(avlnode_);

                
    if (avlnode_->factor_ == NORMAL) break;

                data 
    = avlnode_->data_;
                avlnode_ 
    = avlnode_->parent_;
            }

        }

        
    void remove(T data)
        
    {
            BSTree
    <T>::remove(data);

            
    while (avlnode_ != BTNode<T>::nil())
            
    {
                avlnode_
    ->factor_ -= (avlnode_->data_ > data) ? MORE : LESS;

                
    if (avlnode_->factor_ == LOW) balanceLeft(avlnode_);
                
    else if (avlnode_->factor_ == HIGH) balanceRight(avlnode_);

                
    if (avlnode_->factor_ == NORMAL) break;

                data 
    = avlnode_->data_;
                avlnode_ 
    = avlnode_->parent_;
            }

        }


    private:
        
    void balanceLeft(BTNode<T>* x)
        
    {
            
    if (x->rchild_->factor_ == MORE) rotateRight(x->rchild_);
            rotateLeft(x); 
            avlnode_ 
    = x->parent_;
        }

        
    void balanceRight(BTNode<T>* x)
        
    {
            
    if (x->lchild_->factor_ == LESS) rotateLeft(x->lchild_);
            rotateRight(x);
            avlnode_ 
    = x->parent_;
        }

        
    void rotateLeft(BTNode<T>* x)
        
    {
            BSTree
    <T>::rotateLeft(x);

            BTNode
    <T> *= x->parent_;
            
    ++(x->factor_) -= y->factor_ < NORMAL ? y->factor_ : NORMAL; 
            
    ++(y->factor_) += x->factor_ > NORMAL ? x->factor_ : NORMAL;
        }

        
    void rotateRight(BTNode<T>* x)
        
    {
            BSTree
    <T>::rotateRight(x);

            BTNode
    <T> *= x->parent_;
            
    --(x->factor_) -= y->factor_ > NORMAL ? y->factor_ : NORMAL; 
            
    --(y->factor_) += x->factor_ < NORMAL ? x->factor_ : NORMAL;
        }

    }
    ;

    #endif

     注意,这里的代码中插入部分可以正常工作,但删除部分不能。如果有哪位对删除部分的实现很熟悉,请指教。

    发表于 @ 2007年01月01日 20:01:00|评论(loading...)|编辑

    新一篇: 一个后台运行程序的简单设计 | 旧一篇: 二叉树系列之三:红黑树

    评论

    #henrya2 发表于2008-05-01 12:10:55  IP: 59.52.153.*
    AVL看了好几次都没完全搞明白
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © HappyTree