#includeusing namespace std;
templateclass bstree;
template class bstnode
bstnode(t d, bstnode* l=null, bstnode* r=null):data(d),leftchild(l),rightchild(r)
{} bstnode(bstnode* l=null, bstnode* r=null):data(t()),leftchild(l),rightchild(r)
{} ~bstnode()
{}private:
bstnode* leftchild;
bstnode* rightchild;
t data;
};templateclass bstree
bstree(t value) }
~bstree()
{}public:
void printtree()const
bool search(const t x)
void insert(const t& x)
void makeempty()
bool remove(const t x)
t max()const
t min()const
size_t getsize()
void copy(bstree& p)
protected:
void copy(bstnode* &t, bstnode* &p) //用p給t拷貝
else
}} size_t getsize(bstnode* t)const
bstnode* min(bstnode* t)const
bstnode* max(bstnode* t)const
bool remove(bstnode* & t, const t x)
else
}return false;
} void makeempty(bstnode* &t) }
void printtree(bstnode* t)const
}bool insert(bstnode* & t, const t& x)
else if(t->data > x)
insert(t->leftchild, x);
else if(t->data < x)
insert(t->rightchild , x);
else //插入元素與樹中某個節點相等時,不插入
return false;
} bstnode* search(bstnode* t, const t x)
return null;
}private:
bstnode* root;
t refvalue; //結束標誌
};void main()
; bstreebst;
for(int i=0; i<10; ++i)
bst.insert(a[i]);
bst.printtree();
cout// bst1.printtree();
coutbst.copy(bst1);
bst.printtree();
}
遞迴的使用要理清思路,刪除乙個節點時要考慮多種情況,指標的使用要明確。
c 實現二叉搜尋樹
h部分 ifndef binaryserchtree bst h define binaryserchtree bst h include template class bst 宣告 template class element template class bstnode template cla...
c 實現二叉搜尋樹
c 實現二叉搜尋樹 include include using namespace std struct node class tree tree tree void tree creattree node rt,int n if rt data n else else void tree leve...
二叉搜尋樹的C 實現
參考 標頭檔案 ifndef debug lrn treenode h define debug lrn treenode h void echo int i class treenode void inorder tree walk treenode x void preorder tree wa...