二叉查詢樹 模板實現 c++
1、二叉查詢樹的性質:對於樹中每個結點x,它的左子樹中所有項的值小於x中的值,而它的右子樹中所有項的值大於x中的值。
2、二叉樹的操作主要是:插入,刪除,查詢。
2.1 查詢 contains
實現思路:如果待查詢的項x在樹中,返回true;否則返回false。若當前比較的結點為t,如果t為空,則返回false;如果x的值小於t的值,則遞迴查詢t的左子樹;如果x的值大於t的值,則遞迴查詢t的右子樹;如果x的值等於t的值,則返回true。
bool contains(object& x)const
templatebool binarysearchtree::contains(object& x,binarynode* t)const
2.2 插入 insert
實現思路:為了將x插入到樹中,可以像使用contains一樣沿著樹查詢,如果找到x,則什麼都不做;否則將x插入到遍歷的路徑上的最後乙個節點上。
void insert(const object& x)
templatevoid binarysearchtree::insert(const object& x,binarynode*& t)
2.3 刪除 remove
實現思路:首先先查詢待刪除的項x,如果不存在,則刪除失敗;如果存在,則進行以下操作:
(1)如果節點是一片樹葉,則直接刪除;
(2)如果節點有乙個兒子,則該節點可以在其父節點調整它的鏈以繞過該節點後被刪除。
(3)如果該節點有兩個兒子,則用該節點的右子樹的最小的資料代替該節點的資料而遞迴地刪除那個節點。
void remove(const object& x)
templatevoid binarysearchtree::remove(const object& x,binarynode*& t)
else
}
3、全部的**實現如下:
#ifndef binarysearchtree_h
#define binarysearchtree_h
#includeusing namespace std;
templateclass binarysearchtree
};public:
binarysearchtree():root(null){}
binarysearchtree(const binarysearchtree& rhs);
~binarysearchtree();
bool empty()const;
const object& findmin()const
const object& findmax()const
void printtree()const
bool contains(object& x)const
void makeempty()
void insert(const object& x)
void remove(const object& x)
const binarysearchtree& operator =(const binarysearchtree& rhs);
private:
binarynode* root;
binarynode* findmin(binarynode* t)const;
binarynode* findmax(binarynode* t)const;
bool contains(object& x,binarynode* t)const;
void makeempty(binarynode*& t);
void insert(const object& x,binarynode*& t);
void remove(const object& x,binarynode*& t);
binarynode* clone(binarynode* t);
void printtree(binarynode* t)const;
};templatebinarysearchtree::binarysearchtree(const binarysearchtree& rhs)
templatebinarysearchtree::~binarysearchtree()
templatebool binarysearchtree::empty()const
templatetypename binarysearchtree::binarynode* binarysearchtree::findmin(binarynode* t)const
templatetypename binarysearchtree::binarynode* binarysearchtree::findmax(binarynode* t)const
templatevoid binarysearchtree::printtree(binarynode* t)const
templatevoid binarysearchtree::makeempty(binarynode*& t)
t=null;
}templatevoid binarysearchtree::insert(const object& x,binarynode*& t)
templatevoid binarysearchtree::remove(const object& x,binarynode*& t)
else }
templateconst binarysearchtree& binarysearchtree::operator =(const binarysearchtree& rhs)
return *this;
}templatetypename binarysearchtree::binarynode* binarysearchtree::clone(binarynode* t)
#endif binarysearchtree_h
c 模板實現 二叉查詢樹
搗鼓了乙個晚上,最後還是照著書本把這bst弄出來了。悲催的娃娃啊,不動手寫這個還真的很難啊!1 ifndef btree h 2 define btree h 34 include 5 using std ostream 67 template 8class bstree917 bstnode tr...
類模板實現二叉查詢樹
二叉查詢樹是一種特殊的二叉樹,這種樹上不存在重複的結點,而且它上面的左子樹都比其父結點小,它上面的右子樹都比其父結點大。值得注意的是 具有相同資料的二叉查詢樹會隨著資料插入順序不同而不同。在treenode.h中 在tree.h中 在tree.cpp中 在main.cpp中 值得注意的幾點 1.te...
C 模板實現二叉搜尋樹
二叉搜尋樹的增刪該查操作實現 插入操作 借助輔助遞迴函式node insert node node,key key,value value 像根節點為node的二叉搜尋樹插入乙個資料,返回值為根節點,如果node null,那麼新建乙個節點返回,如果keykey,則插入到左子樹,當前返回的根節點為左...