二叉排序樹的查詢與遍歷C版

2021-06-05 23:07:29 字數 1674 閱讀 2886

/*

* 構造一顆二叉查詢樹,實現樹的插入、刪除等基本操作

* */

#include#includetypedef struct node

node,*pnode;

int array[100]; //按序儲存遍歷後的元素

int k=0; //陣列array長度

//初始化一顆二叉排序樹

pnode init()

//插入結點

void insert(pnode root ,int data)

if(datadata&&root->left==null)

if(data>root->data&&root->right==null)

if(data>root->data)

insert(root->right,data);

else if(datadata)

insert(root->left,data);

else

}//刪除結點,刪除成功返回1,失敗返回0

int deletenode(pnode* root ,int data)

//要刪除的結點有左子樹或者右子樹,此時直接用左子樹或右子樹代替刪除的結點

if((*root)->left==null || (*root)->right==null)

//要刪除的結點有左子樹和右子樹。刪除的結點的左子樹代替刪除的結點,然後

//一直查詢刪除的結點的左子樹的右子樹,直到出現為空。把刪除結點的右子樹插入

if((*root)->left && (*root)->right)

}else if((*root)->data>data)else

deletenode(&(*root)->right,data);

return 0;

}//中序遍歷

void search_middle(pnode root)

//先序遍歷

void search_prior(pnode root)

//後序遍歷

void search_last(pnode root)

//求樹的高度

int tree_height(pnode root)

void main()

//把待排序的元素插入二叉查詢樹中

for(i=0;isearch_middle(pnode);

printf("\n樹的高度%d\n",tree_height(pnode));

//輸出排序後的元素序列

for(i=0;iprintf("%-5d",array[i]);

printf("\n");

//刪除結點

printf("請輸入要刪除的結點:\n");

scanf("%d",&deleteelement);

deletenode(&pnode,deleteelement);

k=0;

search_middle(pnode);

printf("\n刪除後:樹的高度%d\n",tree_height(pnode));

//輸出排序後的元素序列

for(i=0;iprintf("%-5d",array[i]);

printf("\n");

free(pnode);

}

查詢 二叉排序樹

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

查詢 二叉排序樹

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

二叉排序樹的構建與遍歷

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹的鏈式儲存結構是一類重要的資料結構。二叉樹是每個結點最多只有兩個子樹的有序樹。二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2 i 1 個結點 深度為k的二叉樹至多有2 k...