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