?? cbaltree.h
字號:
//平衡樹基類的使用說明
//每一個平衡類的對象都是一個平衡樹的節點,擁有以下結構屬性
//Protected屬性
//int BalNum:該節點的平衡值
//int DeepNum:該節點的深度(計算該節點在內)
//int PID:該節點是否有父節點,有的話,是父節點的左節點還是右節點(-1左節點,0無父節點,1右節點)
//Public屬性
//BalTreeObj* PLeftObj:該節點的左子節點指針
//BalTreeObj* PRightObj:該節點的右子節點指針
//BalTreeObj* PParentObj:該節點的父節點指針
//擁有以下面向用戶的方法
//構造函數,無任何參數,構造后直接初始化為一個無父節點,子節點的單獨的節點
//SetPoint(BalTreeObj* const BTO,const int i=0/1),將該節點設置為某個節點的左/右子節點,并返回是否成功
//SetPoint函數插入成功后,還將調用自身函數自動導致整個樹形結構自動調整,保證是屬于平衡樹結構
//GetRoot(),該函數返回該節點的根節點
//GetBalNum,GetDeepNum,GetPIDNum分別返回幾個私有屬性
//Windy 2005.5.23
#define LEFTCHILDREN -1
#define RIGHTCHILDREN 1
class BalTreeObj //平衡樹的基類
{
private: //為了安全性,不允許隨意更改樹的以下三個屬性值
char BalNum; //平衡值
char DeepNum; //樹的總深度
char PID; //它是父節點的左節點還是右節點,左節點-1,右節點1
public:
BalTreeObj* PLeftObj; //左節點
BalTreeObj* PRightObj; //右節點
BalTreeObj* PParentObj; //父節點
public:
BalTreeObj(); //構造函數
~BalTreeObj(); //析構函數
char GetBalNum(); //得到節點的平衡值
char GetDeepNum(); //得到節點的深度
char GetPIDNum(); //得到節點是左子樹還是右子樹或者無父節點
BOOL SetPoint(BalTreeObj* const BTO,const int i=0); //插入一個節點,并計算新的平衡值
static BalTreeObj* DeletePoint(BalTreeObj* BTO,BalTreeObj*& BTOInstead); //刪除一個節點
BalTreeObj* GetRoot(); //得到根節點
static short GetRealDeep(BalTreeObj* BTO); //得到真正的樹的深度,而不是DEEPNUM(一般用于檢驗當樹發生平衡重構的時候,檢查經過計算的DEEPNUM和樹的真實DEEPNUM是否相同)
static short GetRealBalNum(BalTreeObj* BTO); //得到真正的樹的平衡值,同上
static BOOL CheckTreeData(BalTreeObj* BTO); //檢查樹的各屬性和數據的正確性
static INT GetTreeNode(BalTreeObj* BTO); //得到樹中的節點總數
static void DeleteTree(BalTreeObj* pTreeObj); //刪除樹(除了自身不被刪除)
protected:
virtual CString GetValueMsg(); //虛函數,用于在繼承類中被重載,編程調式使用,顯示錯誤信息
virtual void DeleteObject(); //虛函數,用于在繼承類中被重載,釋放內存
virtual void NodeDataChange(BalTreeObj* BTO); //虛函數,用于在用于在繼承類中被重載,它的作用是將自己和參數節點的具體繼承類中的數據調換(不包括基類中的數據,比如DeepNum,BalNum和PID等)
virtual void PushError(CString strReport); //虛函數,用于在繼承類中被重載,編程調式使用,輸出錯誤信息
virtual BOOL CheckData(); //虛函數,用于在繼承類中被重載,編程調式使用,檢查樹的數據正確性
private:
static void ReBuild(BalTreeObj* const BTO,int UnBalID); //平衡樹重建函數,包括樹的幾種變形
void RefreshBalNum(const int i,BOOL IsAdd = TRUE); //刷新平衡樹,檢查各參數,并負責調用重建函數,進行正確的變換
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -