基於樹的查詢

2021-08-21 11:32:23 字數 2930 閱讀 3374

二叉排序樹

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

//定義陣列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(keydata) //小於父結點

parent->left=p; //新增到左子樹

else //大於父結點

parent->right=p; //新增到右子樹

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

void createbst(bstree *t,int data,int n) //n個資料在陣列d中,tree為二叉排序樹根

return ;

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

int main()

;typedef struct bst

bstree;

void insertbst(bstree *t,int key) //在二叉排序樹中插入查詢關鍵字key

p->data=key; //儲存結點資料

p->left=p->right=null; //左右子樹置空

head=t;

while(head) //查詢需要新增的父結點

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

if(keydata) //小於父結點

parent->left=p; //新增到左子樹

else //大於父結點

parent->right=p; //新增到右子樹

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

void createbst(bstree *t,int data,int n) //n個資料在陣列d中,tree為二叉排序樹根

return ;

}//刪除結點

void bst_delete(bstree *t,int key)

else if(child==0) //父結點為左子樹

else

}else if(!p->left) //左子樹為空,右子樹不為空

else if(!p->right) //右子樹為空,左子樹不為空

else //左右子樹都不為空

p->data=l->data; //將左子樹的資料儲存到被刪除的結點

ll->left=null; //設定父結點的左子樹指標為空

free(ll); //釋放左子樹佔的記憶體空間

}p=null;

} else if(keydata) //需刪除記錄的關鍵字小於結點的關鍵字

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

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

int main()

;typedef struct bst

bstree;

void insertbst(bstree *t,int key) //在二叉排序樹中插入查詢關鍵字key

p->data=key; //儲存結點資料

p->left=p->right=null; //左右子樹置空

head=t;

while(head) //查詢需要新增的父結點

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

if(keydata) //小於父結點

parent->left=p; //新增到左子樹

else //大於父結點

parent->right=p; //新增到右子樹

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

void createbst(bstree *t,int data,int n) //n個資料在陣列d中,tree為二叉排序樹根

return ;

}//刪除結點

void bst_delete(bstree *t,int key)

else if(child==0) //父結點為左子樹

else

}else if(!p->left) //左子樹為空,右子樹不為空

else if(!p->right) //右子樹為空,左子樹不為空

else //左右子樹都不為空

p->data=l->data; //將左子樹的資料儲存到被刪除的結點

ll->left=null; //設定父結點的左子樹指標為空

free(ll); //釋放左子樹佔的記憶體空間

}p=null;

} else if(keydata) //需刪除記錄的關鍵字小於結點的關鍵字

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

}bstree *searchbst(bstree *t,int key)

int main()

基於樹的查詢

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

基於二叉查詢樹的集合

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

基於二叉查詢樹的符號表

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