生活随笔
收集整理的這篇文章主要介紹了
平衡二叉查找树
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
紅黑樹-高級的二叉查找樹
平衡樹和非平衡樹紅黑樹特征:結(jié)點都有顏色,插入和刪除結(jié)點時要遵循紅黑規(guī)則;紅黑規(guī)則 每一個結(jié)點不是紅色就是黑色;跟總是黑色的;如果結(jié)點時紅色的,則它的子節(jié)點必須是黑色的;從根到葉子結(jié)點的每條路徑,必須包含相同的黑色結(jié)點。
修正方法 改變結(jié)點顏色旋轉(zhuǎn)C++函數(shù)庫包含的紅黑樹 #include<set>#include<map>
C++實現(xiàn)紅黑樹,主要類如下 Class RedBlackTreeClass RedBlackNodeNullNodeHeader一個空的紅黑樹RedBlackTree.h #pragma once
#ifndef RED_BLACKT_REE_H_
#define RED_BLACKT_REE_H_//模板類聲明
template <class comparable>
class RedBlackTree;
template <class comparable>
class RedBlackNode;//類定義
template <class comparable>
class RedBlackTree
{
private:RedBlackNode<comparable> *header; //紅黑樹頭結(jié)點RedBlackNode<comparable> *nullNode;//空結(jié)點public:enum {RED,BLACK}; //枚舉顏色,放在RedBlackTree類內(nèi)部;RedBlackTree(const comparable& h);~RedBlackTree();
};template <class comparable>
class RedBlackNode
{comparable element;RedBlackNode* left;RedBlackNode* right;int color;RedBlackNode(const comparable& ele=comparable(),//comparable類型是傳遞進來的類型,缺省參數(shù)賦初值是需要使用自己的類型,注意寫法。RedBlackNode *l=NULL,RedBlackNode* r=NULL,int c=RedBlackTree<comparable>::BLACK): element(ele),left(l),right(r),color(c) //成員函數(shù)賦初值{}//友元類,RedBlackTree類可以方位RedBlackNode類的默認的private成員數(shù)據(jù),注意在哪個類中聲明友元friend class RedBlackTree<comparable>;
};
#endif//類成員函數(shù)定義
template<class comparable>
RedBlackTree<comparable>::RedBlackTree(const comparable & h)
{//new創(chuàng)建節(jié)點,存儲指向根節(jié)點的指針,不存儲其他數(shù)據(jù)nullNode = new RedBlackNode<comparable>();//使用缺省參數(shù)構(gòu)造,nullNode->left = nullNode;nullNode->right = nullNode;//紅黑樹頭指針,指向根節(jié)點,頭指針也是一個結(jié)點,也需要使用new創(chuàng)建,只是其不存儲數(shù)據(jù),僅作存儲根節(jié)點,用于指向根節(jié)點。header = new RedBlackNode<comparable>(h);header->left = nullNode;header->right = nullNode;
}template<class comparable>
inline RedBlackTree<comparable>::~RedBlackTree()
{delete nullNode;delete header;
}
總結(jié)
以上是生活随笔為你收集整理的平衡二叉查找树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。