#ifndefSORTBTREE_H
#defineSORTBTREE_H
#include"BTreeNode.h"
#include
#include
template
classSortBTree
{
public:
SortBTree(T* p , int n);
const T& max()const; // return themaximum
const T& min()const; // return theminimum
BTreeNode
//delete the node of data, if data is notexist, throw error
void delete_data(const T& data) {delete_data(root,data); };
void insert_data(const T& data) { insert_data(root,data);};
BTreeNode
void display()const { display(root,visit); cout < protected: static void insert_data(BTreeNode static BTreeNode static void delete_node(BTreeNode static void delete_data(BTreeNode static void display(BTreeNode private: BTreeNode }; //constructionfunction template SortBTree { root = new BTreeNode root = NULL; //注意這行很必要,BTreeNode沒有默認(rèn)設(shè)置為NULL的構(gòu)造函數(shù) for(int i = 0; i != n; ++i) { insert_data(root,p[i]); } } //insert a new data template voidSortBTree { if(rt == NULL) { rt = newBTreeNode //rt->data = ndata; //這三條語句不等于上面那條 //rt->lchild = NULL; //用這三條語句是錯的 //rt->rchild = NULL; } else if(rt->data == ndata) return; else if(rt->data > ndata)insert_data(rt->lchild, ndata); else insert_data(rt->rchild, ndata); } //delete a node from tree(improved) // 如果p沒有左子樹,則讓p的右子樹的根代替p即可。 // 如果p有左子樹,找出左子樹中結(jié)點值最大的節(jié)點temp(最右下角的結(jié)點,也是中序遍歷最后一個結(jié)點, 他沒有右子樹) // 用temp的結(jié)點值替換下p的結(jié)點值 // 刪除temp(因為temp的右子樹為空,從而直接用其左子樹根代替本身就可達(dá)到刪除結(jié)點的目的) // 注: 一般的方法用temp替換p,但是這樣可能導(dǎo)致樹很不平衡。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |