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

2021-08-14 10:43:28 字數 1013 閱讀 4380

動態查詢表的特點是:表結構在查詢過程中動態生成的,即對於給定值key,若表中存在等於key的記錄,則查詢成功,否則插入關鍵字key的記錄。

1、二叉排序樹

(1)、可以是空樹

(2)、滿足下列條件:若左子樹不空,則所有的左子樹值小於根節點值。

若右子樹不空,則所有的右子樹值大於根節點值。

他的左右子樹也分別是二叉排序樹。

int search(bitree t,key k)
二叉排序樹是在查詢中形成的,每次插入的值必為樹的葉子節點。為了找到查詢不成功時訪問的最後乙個節點,需改進到以下演算法。

int search(bitree t,key k,bitree f,bitree &p) 

else

if(k==t->data)

else

if(kdata)

else

}

插入演算法:

int insert(bitree &t,int e)

else

return false;

}

進行刪除操作時,有可能會破壞樹,所以要修正樹:

刪除葉子時,不用調整。

刪除的結點只有左子樹時,直接將左子樹向上移動。

刪除的結點只有右子樹時,直接將右子樹當做刪除結點的前驅的左子樹。

刪除的結點有左右子樹時,需要找到該節點的左子樹a的右子樹b的最後乙個右子樹結點c,將c的值賦給刪除結點的值,然後若找到刪除結點的左子樹有右子樹的話,

需將該節點的右子樹的前驅的右子樹賦值為該節點的左子樹。否則,直接將刪除結點的左子樹上移。

int delete(bitree &t)

else

if(!p->lchild)

else

p->data=s->data;

if(p!=q)

else

}}

查詢表 二叉排序樹

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

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

2.二叉樹的基本運算 2.4.4程式及說明 2.5查詢 略由定義可以得出二叉排序樹的乙個重要性質 中序遍歷是乙個二叉排序樹時可以得到乙個遞增有序數列。略略 略從二叉排序樹中刪除乙個結點,必須保證刪除後所得二叉樹仍然滿足二叉排序樹的性質不變。1.刪除葉子結點 直接刪除 2.刪除單分支結點 將刪除結點的...

動態查詢之 二叉排序樹

從圖上可得出二叉排序樹的基本概念。左子樹小於根,右子樹大於根 中序遍歷後有序 樹中最小的樹在最左邊,最大的在最右邊 這裡主要分析一下二叉排序樹的插入和刪除。pcur new node key,value if key pparent key else if key pparent key 這裡只擷取...