二叉查詢樹 C語言實現

2021-08-31 12:44:23 字數 1661 閱讀 9020

/*

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

* */

#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);

}

二叉查詢樹C語言實現

二叉查詢樹c語言實現 1.二叉查詢樹的定義 左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹 2.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右...

二叉查詢樹 C語言實現

二叉查詢樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉查詢樹。在使用遞迴的時候,假如函式有返回值,記得接收返回值,並且保證函式在每個板塊結束後都有return,以防出錯。具體見find ins...

二叉查詢樹(BST)及其C語言實現

對任何節點x,其左子樹中的關鍵字最大不超過key x 右子樹中的關鍵字最小不小於key x 二叉查詢樹這種資料結構,它支援多種動態集合操作,search,minimum,maximum,predecessor 前驅 successor 後繼 insert以及delete。在二叉查詢樹上執行的基本操作...