查詢 二叉排序樹

2021-06-27 01:56:47 字數 2490 閱讀 5629

順序查詢

順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是:從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄;如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。

順序查詢演算法實現**如下:

/*順序查詢,a為陣列,n為要查詢的陣列個數,key為要查詢的關鍵字*/

int sequential_search(int *a,int n,int key)

return 0;

}

**很簡單,就是在陣列a中檢視有沒有關鍵字(key),當你需要查詢複雜表結構的記錄時,只需要把陣列a與關鍵字key定義成你需要的表結構和資料型別即可。

這裡並不夠完美,因為每次迴圈時都需要對i是否越界做判斷,事實上,還可以有更好一點的辦法,設定乙個哨兵,可以解決不需要每次讓i與n做判斷,實現**如下:

int sequential_search(int *a,int n,int key)

return i;

}

此時**是從尾部開始查詢,由於a[0]=key,也就是說,如果a[i]中有key則返回i,查詢成功。否則一定在最終的a[0]處等於key,此時返回0,即說明a[1]~a[n]中沒有關鍵字key,查詢失敗。

折半查詢

折半查詢(binary search)技術,又稱為二分查詢。它的前提線性表中的記錄必須是關鍵碼有序,線性表必須採用順序儲存。折半查詢的基本思想是:在有序表中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵字相等,則查詢成功;若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查詢,不斷重複上面過程,知道查詢成功,或所有查詢區域無記錄,查詢失敗為止。實現**如下:

int sequential_search(int *a,int n,int key)

return 0;

}

二叉排序樹(binary sort tree),又稱為二叉查詢樹,它或者是一顆空樹,或者具有下列性質的二叉樹。

若它的左子樹不為空,則左子樹所有結點的值均小於它的根結點的值。

若它的右子樹不為空,則右子樹上所有結點的值均不大於根結點的值。

它的左,右子樹也分別為二叉樹。

二叉樹的結構:

typedef struct bitnode

bitnode , *bitree;

二叉排序樹的查詢實現過程**如下:

/**遞迴查詢二叉樹t中是否存在key,

指標f指向t的雙親,其初始呼叫值為null

若查詢成功,則指標p指向資料元素結點,並返回true,

否則指標p指向查詢路徑上訪問的最後乙個結點並返回false

*/status searchbst(bitree t ,int key, bitree f, bitree *p)

else if(key == t->data)

else if(key < t->data)

return searchbst(t->lchild,key,t,p);

else return searchbst(t->rchild,key,t,p);

}

二叉排序樹的插入操作

**如下:

/**當二叉排序樹t中不存在關鍵字等於key的資料元素時,

插入key並返回true,否則返回false

*/status insertbst(bitree *t,int key)

else if(key < p->data)

p->lchild = s;

else

p->rchild = s;

return true;

} else

return false;

}

二叉樹的刪除操作:

對二叉樹結點的刪除分三種情況:

葉子結點

僅有左或右子樹

左右子樹都有的結點。

我們來看**,下面這個演算法是遞迴方式對二叉樹排序樹t查詢key,查詢到並刪除**:

/**若二叉樹t中存在關鍵字等於key的資料元素時,則刪除該資料元素結點,

並返回true,否則返回false

*/status deletebst(bitree *t,int key)

}status delete(bitree *p)

else if((*p)->lchild == null)

else

(*p)->data = s->data;

if(q!=*p)

q->rchild = s->lchild;

else

q->lchild = s->lchild;

free(s);

} return true;

}

查詢 二叉排序樹

動態查詢表 表結構本身是在查詢過程中動態生成的,即對於給定值key,若表中存在其關鍵值等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹 1 若他的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值。2 若它的右子樹不空,則右...

Codeup二叉查詢樹 二叉排序樹

輸入一系列整數,建立二叉排序數,並進行前序,中序,後序遍歷。輸入第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。可能有多組測試資料,對於每組資料,將題目所給資料建立乙個二叉排序樹,並對二叉排序樹進行前序 中序和後序遍歷。每種遍歷結果輸出一行。每行最後乙個資料之後有乙個空格。12 2 ...

二叉排序樹 二叉搜尋樹 二叉查詢樹

特點 結構體定義struct node 建樹 建二叉排序樹 void create node root,int t else if t root data create root lc,t else create root rc,t 前序遍歷 層序 字典序 int flag int pre 1001...