二叉搜尋樹

2021-04-28 11:14:56 字數 3762 閱讀 3825

#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 解釋 輸入為 ...