二叉排序樹
建立二叉樹,並將資料插入到結點中。程式執行後會將原資料進行從小到大排序,並輸出排序結果
//定義陣列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...