#ifndef
bst_h
#define
bst_h
#include
using
namespace
std;
template
k,class
t>
struct
bstnode
//二叉搜尋樹結點類
bstnode(const
kk,const
td,bstnode
* l=null,bstnode
* r=null)
:key(k),data(d),left(l),right(r){}
bool
operator
<(const
bstnode
& bn)
bool
operator>(const
bstnode
& bn)
bool
operator==(const
bstnode
& bn)
template
k,class
t>
friend
istream& operator>>(istream& in,bstnode
& bn);
template
k,class
t>
friend
ostream& operator
<<(ostream& out,bstnode
& bn); };
template
k,class
t>
class
bst//
二叉搜尋樹類定義 }
~bst()
bool
search(const
kx)const
//搜尋
bst& operator=(const
bst& r);
//賦值
void
makeempty()
//置空
void
printtree()const
//輸出 t
min()
//求最小 t
max()
//求最大
bool
insert(const
bstnode
& bn)
//插入新元素
bool
remove(constkx)
//刪除
private:
bstnode
*root;
//二叉搜尋樹的根指標
char
refvalue;
//停止輸入標誌,用於輸入
bstnode
* search(const
kx,bstnode
*ptr);
//遞迴:搜尋
void
makeempty(bstnode
*&ptr);
//遞迴:置空
void
printtree(bstnode
*ptr)const;
//遞迴:輸出
bstnode
* copy(const
bstnode
*ptr);
//遞迴:複製
bstnode
* min(bstnode
*ptr)const;
//遞迴:求最小
bstnode
* max(bstnode
*ptr)const;
//遞迴:求最大
bool
insert(const
bstnode
& bn,bstnode
*&ptr);
//遞迴:插入
bool
remove(const
kx,bstnode
*&ptr);
//遞迴:刪除};
template
k,class
t>
ostream
&operator
<<(ostream &out,bstnode
&bn)
template
t,class
k>
istream
&operator >>(istream &in,bstnode
&bn)
//在以ptr為根的二叉搜尋樹中搜尋含有x的結點。若找到,則函式返回該結點的位址,否則函式返回null
template
k,class
t>
bstnode
* bst
::search(const
kx, bstnode
*ptr)
//在以ptr為根的二叉搜尋樹中插入所含值為bn的結點。若在樹中已經有含bn的結點,則不插入
template
k,class
t>
bool
bst::insert(const
bstnode
&bn, bstnode
*&ptr)
return
true; }
else
if(bn.key
< ptr->key)
//左子樹插入
insert(bn,ptr->left);
else
if(bn.key > ptr->key)
//右子樹插入
insert(bn,ptr->right);
else
return
false;
//x已在樹中,不再插入}
//在以ptr為根結點的二叉搜尋樹中刪除含x
template
k,class
t>
bool
bst::remove(const
kx, bstnode
*&ptr)
else
//ptr
指示關鍵碼為x的結點,它只有乙個或零個子女 }
return
false; }
template
k,class
t>
bst& bst
::operator=(const
bst& r)
template
k,class
t>
bstnode
* bst
::copy(const
bstnode
*ptr)
template
k,class
t>
void
bst::makeempty(bstnode
*&ptr)
} template
k,class
t>
void
bst::printtree(bstnode
*ptr)const
template
k,class
t>
bstnode
* bst
::min(bstnode
*ptr)const
template
k,class
t>
bstnode
* bst
::max(bstnode
*ptr)const
#endif
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...