題目:建立乙個類,類中的資料成員時一棵二叉搜尋樹,對外提供的介面有新增結點和刪除結點這兩種方法。使用者不關注二叉樹的情況。要求我們給出這個類的結構以及實現類中的方法。刪除結點比較麻煩,因為需要調整樹的結構,這是因為刪除結點並不一定發生在葉子結點。如果刪除的是葉子結點,那麼操作非常簡單,只是做相應的刪除就可以了,但如果刪除的是非葉子結點,那麼就需要調整二叉搜尋樹的結構。調整的策略有兩個。假設當前需要刪除的結點為a,
找出a結點左子樹中的最大值結點b,將b調整到原先a的位置。
找出a結點右子樹中的最小值結點c,將c調整到原先a的位置。
這其中涉及到許多複雜的指標操作,在下面的**示例中並沒有完成結點刪除操作,等有空再補充研究一下。
#include#include總結#include
using
namespace
std;
//二叉樹結點
struct
binarytreenode
;class
bst;
//建構函式
bst::bst(int
value)
//析構函式
bst::~bst()
//建立二叉樹結點
binarytreenode* bst::createbinarytreenode(int
value)
//求二叉搜尋樹最大值
binarytreenode* bst::getmaxnode(binarytreenode*pnode)
return
pnode;}//
求二叉搜尋樹最小值
binarytreenode* bst::getminnode(binarytreenode*pnode)
return
pnode;}//
二叉搜尋樹新增結點
void bst::addnode(int
value)
//else
if(pnode->m_nvalue >value)
else
//否則繼續遍歷其左子樹
pnode=pnode->m_pleft;
}//思路跟上述相同
else
if(pnode->m_nvalue
pnode=pnode->m_pright;}}
}//未完成void bst::deletenode(int
value)
else
if(proot->m_pright!=null)
else
}if(pnode->m_nvalue==value)
else
if(pnode->m_pright!=null)
else}}
}void bst::inorderprinttree(binarytreenode* proot)//
中序遍歷
else}//
因為需要使用遞迴來進行中序遍歷,所以還需要呼叫乙個帶引數的中序遍歷函式
void bst::inorderprinttree()//
中序遍歷
void
main()
二叉搜尋樹的插入與刪除
插入 bstree insert bstree bst,elementtype x else return bst 刪除 bstree delete bstree bst,element x else return bst 總結 二叉樹的插入比較好解決,只需要簡單的遞迴判斷即可。麻煩一點的是二叉樹的...
二叉搜尋樹的插入與刪除
題目 建立乙個類,類中的資料成員時一棵二叉搜尋樹,對外提供的介面有新增結點和刪除結點這兩種方法。使用者不關注二叉樹的情況。要求我們給出這個類的結構以及實現類中的方法。刪除結點比較麻煩,因為需要調整樹的結構,這是因為刪除結點並不一定發生在葉子結點。如果刪除的是葉子結點,那麼操作非常簡單,只是做相應的刪...
二叉搜尋樹的插入 刪除
二叉搜尋樹 就是每乙個結點的data值,都大於它的所有左孩子的data,小於所有右孩子的data 二叉搜尋樹的插入刪除的模擬 pragma once namespace ljc template class t friend class binarysorttree template class t...