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,否則...