2015-09-05 64 views
1

這是我用來創建BST的節點。我將如何釋放這棵樹。下面是我嘗試過的嘗試,但我不太清楚如何釋放str。如何釋放一個包含char指針的BST?

typedef struct tree_s tree_t; 

struct tree_s 
{ 
    char *str; 
    tree_t *left; 
    tree_t *right; 
}; 

void freeTree(tree_t *tree) { 
    if (tree == NULL) 
    { 
     return; 
    } 
    /* first delete both subtrees */ 
    freeTree(tree->left); 
    free(tree->str); 
    freeTree(tree->right); 

    /* then delete the node */ 
    free(tree); 
} 
+0

你是如何分配「str」開始的? – selbie

+0

@selbie我malloc'd它 – Kyuu

+0

一旦你刪除了整棵樹,第二次當你將再次添加節點時,你可能會得到錯誤,因爲你一定沒有將'root'的值改爲** NULL ** – surajsn

回答

3

只要有一個後序遍歷(這是你在做什麼)和free()分配的內存。 [free(str)]你的情況free(tree->str); 你已經做對了。更簡潔的一個

void preord(tree *root) 
{ 
if(root) 
{ 
    preord(root->left); 
    preord(root->right); 
    free(tree->str); 
    free(tree); 
} 
} 

注:一旦你知道你目前正在使用的非空的,那麼你可以釋放char *任何時間節點,只記得孩子們必須釋放在父母面前。

+0

@問題:檢查我的答案。 – coderredoc

+0

虐待它試一試。無論如何要知道整棵樹是否已經完全釋放?/檢查釋放是否成功 – Kyuu

+0

您可以使用valgrind或VSstudio功能。 – coderredoc