接前一篇博文新增二叉查詢樹的元素刪除功能。
#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...