動態查詢表的特點是:表結構在查詢過程中動態生成的,即對於給定值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 這裡只擷取...