2012-05-05 185 views

回答

1

您可以使用後序遍歷遍歷樹並刪除節點爲:

function deleteTree(node, tree_root) { 
    if (node != null) { 
     // recursively delete left sub-tree. 
     deleteTree(node->left, tree_root); 

     // recursively delete right sub-tree. 
     deleteTree(node->right, tree_root); 

     // time to delete the node..but only if it's not root. 
     if(node != tree_root) { 
       delete node; 
     } 
    } 
} 

,並調用上面的函數爲:

deleteTree(root,root); 
0

寫方法delete,這需要一個樹節點:

for each child in node 
    call delete on child 
    remove child from node 
    free child 

對於根調用這個刪除方法的每個孩子。

0

有趣的是,由你可能會做一些優雅 - 樹可能不會在刪除後使用,因此您可以編寫節點的析構函數:

struct Node // Non-copyable! 
{ 
    Node *left, *right; 

    Node() 
    : left(NULL) 
    , right(NULL) 
    { 
    } 
    ~Node() 
    { 
    delete left; 
    delete right; 
    } 
}; 

就是這樣!您使用它:delete root。請注意,在delete之前,您可能不會測試NULL,因爲它通過C++標準運行良好(只是返回)。

+0

我需要在刪除後使用root。 –

+0

好吧,方法是這樣的:void DeleteChildren(){delete left;刪除權利; }':)與上面的方法不同,你應該測試'node!= NULL' – demi