1. 葉子結點
2. 僅有左或右子樹的結點
3. 左右子樹都有結點
面對上面提到的1,2兩種情況,直接刪除就好了,注意釋放空間;第三種情況時,就用遞迴方式對二叉排序樹t查詢key,查詢到時就刪除。
/*
* 若二叉排序樹t中存在關鍵字等於key的資料元素時,刪除該結點
* 並返回true,否則返回false
*/bool deletebst(bitree* t,int key)else
}}
下面的**則是delete():
//從二叉排序樹中刪除結點,並重接它的左或右子樹
//左右子樹都空和判斷出只有一邊為空的效果是一樣的~~,所以這裡沒有單獨列出這種情況
bool delete(bitree* p)else
if(p->lchild ==
null)else
p->
data
= s->
data; //s此時指向被刪除結點的直接前驅
if(q!=p)
q -> rchild = s->lchild;//重接q的右子樹
else
q->lchild = s->lchild;//重接q的左子樹
free(s);
}}
歡迎交流~~
查詢二 二叉排序樹
1 左子樹上所有結點的值均小於根結點的值 2 右子樹上所有結點的值均大於根結點的值 3 它的左 右子樹也都分別是二叉查詢樹。查詢原理 若二叉查詢樹為空,則查詢不成功 否則 1 key值等於根結點,則查詢成功 2 key值小於根結點,則繼續在左子樹上進行查詢 3 key值大於根結點,則繼續在右子樹上進...
資料結構與演算法 樹的應用 三 二叉排序樹
二叉排序樹是一棵特殊的二叉樹,它是一棵二叉樹但同時滿足如下條件 對於樹上任意乙個結點,其上的數值必大於等於其左子樹上任意結點數值,必小於等於其右子樹上任意結點的數值。我們從二叉樹的插入開始了解其建樹方式,對二叉排序樹插入數字x 若當前數為空,則x為其根節點 若當前結點大於x,則x插入其左子樹 若當前...
查詢 二叉排序樹
順序查詢 順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。順序查詢演算法實現 如下 順序...