動態查詢表 二叉排序樹(刪除結點)

2021-09-24 04:35:07 字數 1390 閱讀 1418

2.二叉樹的基本運算

2.4.4程式及說明

2.5查詢

略由定義可以得出二叉排序樹的乙個重要性質:中序遍歷是乙個二叉排序樹時可以得到乙個遞增有序數列。略略

略從二叉排序樹中刪除乙個結點,必須保證刪除後所得二叉樹仍然滿足二叉排序樹的性質不變。

1. 刪除葉子結點

直接刪除

2.刪除單分支結點

將刪除結點的孩子當成雙親結點f的孩子

3.雙分支結點

(1)可以選擇p左子樹的最小值替換它(主要)

(2)也可以選擇p右子樹中權值最小的替換它

原理:這兩個結點剛好是二叉排序樹進行中序遍歷的直接前驅和後驅,這樣子能夠保證在刪除結點p後二叉樹排序依舊有序,且替換過程移動的結點數最少。

2.4.3.1例題說明

已知序列,其中兩個7,後乙個有劃線區分。

(1)用這個序列生成一顆二叉排序樹

(2)在原圖中刪除40時,有幾種情況?並畫出刪除之後的二叉樹。

(3)在原圖中刪除32有幾種情況?並畫出刪除之後的二叉樹

中序排序(左根右)

生成的二叉排序樹

當刪除結點為40時

當刪除32時,取左子樹中的最大值30

當刪除32時,取右子樹中的最大值40

多畫幾個二叉樹圖,理解之後寫程式

bstnode  *bstdelete(bstnode *bt,keytype k)

//2.判斷該點在二叉樹中是否存在

if(p==null) return bt;

//3.單分支結構

if(p->lchild==null)//p無左子樹

else//雙分支結點

if(q==p)//用來判斷p結點的左子樹是否有右子樹的

q->lchild=s->lchild;//s為p左子樹的最右子樹,所以它沒有右子樹了

else

q->rchild=s->lchild;

p->key=s->key;

free(s);

} return bt;

}

動態查詢表(二叉排序樹)

動態查詢表的特點是 表結構在查詢過程中動態生成的,即對於給定值key,若表中存在等於key的記錄,則查詢成功,否則插入關鍵字key的記錄。1 二叉排序樹 1 可以是空樹 2 滿足下列條件 若左子樹不空,則所有的左子樹值小於根節點值。若右子樹不空,則所有的右子樹值大於根節點值。他的左右子樹也分別是二叉...

查詢表 二叉排序樹

資料結構實驗之查詢一 二叉排序樹 time limit 400 ms memory limit 65536 kib problem description 對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,...

二叉排序樹的查詢刪除

include stdio.h include math.h 二叉排序樹 typedef struct bitnode 結點結構 bitnode,bitnree 遞迴查詢二叉排序樹t中是否存在key 指標f指向t的雙親,其初始呼叫值為null 如果查詢成功,指標p指向這個元素結點,返回ture,否則...