基於樹的查詢

2021-10-11 18:38:59 字數 4152 閱讀 4421

二叉排序樹

建立二叉樹,並將資料插入到結點中。程式執行後會將原資料進行從小到大排序,並輸出排序結果

//定義陣列source,並設定陣列裡面的資料。然後定義函式insertbst(),用於在二叉樹排序插入關鍵字key。首先查詢要插入資料的父結點,然後根據插入資料的key于父結點值的大小,決定將結點插入到父結點的左子樹還是右子樹。

#include

#include

#include

#include

#define arraylen 10

int source=

;typedef struct bst

bstree;

void

insertbst

(bstree *t,

int key)

//在二叉排序樹中插入查詢關鍵字key

p->data=key;

//儲存結點資料

p->left=p-

>right=null;

//左右子樹置空

head=t;

while

(head)

//查詢需要新增的父結點

//判斷新增到左子樹還是右子樹

if(key>data)

//小於父結點

parent-

>left=p;

//新增到左子樹

else

//大於父結點

parent-

>right=p;

//新增到右子樹

}//定義函式createbst(),將陣列中的資料全部插入到二叉排序樹中。

void

createbst

(bstree *t,

int data,

int n)

//n個資料在陣列d中,tree為二叉排序樹根

}//定義函式bst_ldr,這是乙個中序遍歷二叉樹程式,能夠檢查二叉排序樹是否成功。

void

bst_ldr

(bstree *t)

//中序遍歷

return;}

//定義主函式main()用於輸出測試結果

intmain()

刪除結點

#include

#include

#include

#include

#define arraylen 10

int source=

;typedef struct bst

bstree;

void

insertbst

(bstree *t,

int key)

//在二叉排序樹中插入查詢關鍵字key

p->data=key;

//儲存結點資料

p->left=p-

>right=null;

//左右子樹置空

head=t;

while

(head)

//查詢需要新增的父結點

//判斷新增到左子樹還是右子樹

if(key>data)

//小於父結點

parent-

>left=p;

//新增到左子樹

else

//大於父結點

parent-

>right=p;

//新增到右子樹

}//定義函式createbst(),將陣列中的資料全部插入到二叉排序樹中。

void

createbst

(bstree *t,

int data,

int n)

//n個資料在陣列d中,tree為二叉排序樹根

}//定義函式bst_ldr,這是乙個中序遍歷二叉樹程式,能夠檢查二叉排序樹是否成功。

void

bst_ldr

(bstree *t)

//中序遍歷

return;}

//刪除結點

void

bst_delete

(bstree *t,

int key)

else

if(child==0)

//父結點為左子樹

else

}elseif(

!p->left)

//左子樹為空,右子樹不為空

elseif(

!p->right)

//右子樹為空,左子樹不為空

else

//左右子樹都不為空

p->data=l-

>data;

//將左子樹的資料儲存到被刪除的結點

ll->left=null;

//設定父結點的左子樹指標為空

free

(ll)

;//釋放左子樹佔的記憶體空間

} p=null;

}else

if(key>data)

//需刪除記錄的關鍵字小於結點的關鍵字

else

//需刪除記錄的關鍵字大於結點的關鍵字}}

//定義主函式main()用於輸出測試結果

intmain()

二叉排序樹的查詢

#include

#include

#include

#include

#define arraylen 10

int source=

;typedef struct bst

bstree;

void

insertbst

(bstree *t,

int key)

//在二叉排序樹中插入查詢關鍵字key

p->data=key;

//儲存結點資料

p->left=p-

>right=null;

//左右子樹置空

head=t;

while

(head)

//查詢需要新增的父結點

//判斷新增到左子樹還是右子樹

if(key>data)

//小於父結點

parent-

>left=p;

//新增到左子樹

else

//大於父結點

parent-

>right=p;

//新增到右子樹

}//定義函式createbst(),將陣列中的資料全部插入到二叉排序樹中。

void

createbst

(bstree *t,

int data,

int n)

//n個資料在陣列d中,tree為二叉排序樹根

}//定義函式bst_ldr,這是乙個中序遍歷二叉樹程式,能夠檢查二叉排序樹是否成功。

void

bst_ldr

(bstree *t)

//中序遍歷

return;}

//刪除結點

void

bst_delete

(bstree *t,

int key)

else

if(child==0)

//父結點為左子樹

else

}elseif(

!p->left)

//左子樹為空,右子樹不為空

elseif(

!p->right)

//右子樹為空,左子樹不為空

else

//左右子樹都不為空

p->data=l-

>data;

//將左子樹的資料儲存到被刪除的結點

ll->left=null;

//設定父結點的左子樹指標為空

free

(ll)

;//釋放左子樹佔的記憶體空間

} p=null;

}else

if(key>data)

//需刪除記錄的關鍵字小於結點的關鍵字

else

//需刪除記錄的關鍵字大於結點的關鍵字}}

bstree *

searchbst

(bstree *t,

int key)

intmain()

基於樹的查詢

二叉排序樹 建立二叉樹,並將資料插入到結點中。程式執行後會將原資料進行從小到大排序,並輸出排序結果 定義陣列source,並設定陣列裡面的資料。然後定義函式insertbst 用於在二叉樹排序插入關鍵字key。首先查詢要插入資料的父結點,然後根據插入資料的key于父結點值的大小,決定將結點插入到父結...

基於二叉查詢樹的集合

我們都知道dictionary查詢元素非常快,其實現原理是 將你tkey的值雜湊到陣列的指定位置,將tvalue的值存入對應的位置,由於取和存用的是同乙個演算法,所以就很容易定位到tvalue的位置,花費的時間基本上就是實現雜湊演算法的時間,跟其中元素的個數沒有關係,故取值的時間複雜度為o 1 集合...

基於二叉查詢樹的符號表

1.資料表示 我們巢狀定義乙個私有node類來表示二叉查詢樹上的乙個結點。每個結點都含有乙個鍵,乙個值,一條左鏈結,一條右鏈結。左鏈結指向一棵由小於該結點的所有鍵組成的二叉查詢樹,右鏈結指向一棵由大於該結點的所有鍵組成的二叉查詢樹。變數n給出以該結點為根的子樹的結點總數。這樣有 size x siz...