我想刪除一個二叉樹的,我的工作方案如下:刪除引用二叉樹通過節點的節點只有
(1)它讀取樹要創建節點的數量。
(2)它讀取所有這些節點。
(3)它打印由這些節點形成的樹。
(4)它讀取終端上要刪除的節點。
直到這裏一切工作正常,但是當我嘗試刪除所需的節點,然後它給出了分段錯誤的錯誤。
注:我必須通過引用傳遞根(這就是爲什麼我已經爲delete_tree_node(int delete_val,node ** root))中保留了兩個指針。
我的方法這樣做是: 我稱之爲遞歸函數delete_tree_node()由左,右的孩子,以遍歷樹,直到我得到節點等於值用戶想要刪除的節點的值。一次,如果我得到那個地方,然後我釋放()該節點。
我的代碼來實現這一目標是:(這給分割問題):
delete_tree_node(int delete_val, node **root)//two "**" because i call by reference in function call
{
node*temp1;
temp1=(*root);
if(delete_val==(*root)->freq)
{
free((*root));
temp1=temp1->left;
(*root)=temp1;
}
if(delete_val<temp1->freq)
{
delete_tree_node(delete_val,&temp1->left);
}
if(delete_val>temp1->freq)
{
delete_tree_node(delete_val,&temp1->right);
}
}
它的函數調用:
delete_tree_node(delete_val, & head);//I give reference
能有人幫我瞭解:
( 1)爲什麼它給分段錯誤。
(2)我的邏輯是正確的刪除所需的節點?如果不是,那麼你能給我一段代碼作爲參考嗎?
在教科書中複習如何刪除二叉搜索樹中的節點。這並不像你現在編程那麼簡單。 – Henry