C語言實現二叉查詢樹的元素刪除功能

2021-10-06 18:24:54 字數 2938 閱讀 7989

接前一篇博文新增二叉查詢樹的元素刪除功能。

#include

#include

//二叉查詢樹的節點

struct bst_node

;typedef

struct bst_node bst_node;

typedef

struct bst_node *p_bst_node;

typedef

struct bst_node *bin_search_tree;

typedef

struct bst_node *

*p_bin_search_tree;

void

clear_bst

(p_bin_search_tree)

;void

insert_bst

(p_bin_search_tree,

int)

;void

print_bst

(bin_search_tree)

;void

del_bst

(p_bin_search_tree,

int, p_bst_node)

;p_bst_node find_min

(bin_search_tree)

;int

main()

}for

(i =

0; i <3;

++i)

printf

("\n");

}printf

("\n");

char

(*pc)[4

];char

*pd;

for(i =

0, pc = a; i <3;

++i)

printf

("\n");

}printf

("\n");

bin_search_tree bst =

null

; p_bin_search_tree p_bst =

&bst;

insert_bst

(p_bst,1)

;insert_bst

(p_bst,2)

;insert_bst

(p_bst,3)

;insert_bst

(p_bst,0)

;insert_bst

(p_bst,-1

);insert_bst

(p_bst,8)

;insert_bst

(p_bst,6)

;insert_bst

(p_bst,5)

;insert_bst

(p_bst,7)

;print_bst

(bst)

; p_bst_node p_min =

find_min

(bst)

;printf

("\n%d\n"

, p_min->value)

;del_bst

(p_bst,1,

null);

printf

("\n");

print_bst

(bst)

;printf

("\n");

del_bst

(p_bst,3,

null);

del_bst

(p_bst,6,

null);

del_bst

(p_bst,-1

,null);

printf

("\n");

print_bst

(bst)

;#if 1

printf

("\n");

clear_bst

(p_bst)

; bst =

null

;#endif

return0;

}void

clear_bst

(p_bin_search_tree pt)

}void

insert_bst

(p_bin_search_tree pt,

int value)

if(value <

(*pt)

->value)

insert_bst(&

(*pt)

->left, value)

;else

if(value >

(*pt)

->value)

insert_bst(&

(*pt)

->right, value)

;else;}

void

print_bst

(bin_search_tree tree)

void

del_bst

(p_bin_search_tree pt,

int x, p_bst_node p_parent)

else

}else

else

}free

(p_del);}

else

else

free

(p_del);}

else}}

}p_bst_node find_min

(bin_search_tree tree)

-1 0 1 2 3 5 6 7 8 

-1-1 0 2 3 5 6 7 8

0 2 5 7 8

process finished with exit code 0

關鍵在於:

元素的遞迴刪除

分析待刪除的節點是否有孩子,有幾個孩子

何時才是對節點進行free()的最佳時機

二叉查詢樹C語言實現

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

二叉查詢樹 C語言實現

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

二叉查詢樹 C語言實現

構造一顆二叉查詢樹,實現樹的插入 刪除等基本操作 include includetypedef struct node node,pnode int array 100 按序儲存遍歷後的元素 int k 0 陣列array長度 初始化一顆二叉排序樹 pnode init 插入結點 void inse...