2012-05-05 18 views
2

ルート以外のプレフィックスツリーのすべての子を削除する必要があります。私はコードを要求していません。私はツリーのすべての子をトラバースして削除するメソッドが必要です。このdeleteメソッドルート呼び出しの各生徒用ツリーの子を削除する方法

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

答えて

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を、書きます。

0

興味深いです - 削除後にツリーが使用されない可能性があるので、ノードのデストラクタを書くことができます。

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

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

それだけです!あなたはそれを使用します:delete rootdeleteの前にNULLをテストしないかもしれないことに注意してください。なぜなら、C++標準でうまく動作するからです。

+0

削除後にrootを使用する必要があります。 –

+0

これで、メソッドはうまくいきます: 'void DeleteChildren(){delete left;権利を削除する。 } ':)上記のメソッドとは異なり、' node!= NULL'をテストする必要があります – demi

関連する問題