ルート以外のプレフィックスツリーのすべての子を削除する必要があります。私はコードを要求していません。私はツリーのすべての子をトラバースして削除するメソッドが必要です。このdeleteメソッドルート呼び出しの各生徒用ツリーの子を削除する方法
for each child in node
call delete on child
remove child from node
free child
:
ルート以外のプレフィックスツリーのすべての子を削除する必要があります。私はコードを要求していません。私はツリーのすべての子をトラバースして削除するメソッドが必要です。このdeleteメソッドルート呼び出しの各生徒用ツリーの子を削除する方法
for each child in node
call delete on child
remove child from node
free child
:
あなたは木を横断するポスト順トラバーサルを使用してノードを削除することができます。
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);
は、ツリーノードを取る方法delete
を、書きます。
興味深いです - 削除後にツリーが使用されない可能性があるので、ノードのデストラクタを書くことができます。
struct Node // Non-copyable!
{
Node *left, *right;
Node()
: left(NULL)
, right(NULL)
{
}
~Node()
{
delete left;
delete right;
}
};
それだけです!あなたはそれを使用します:delete root
。 delete
の前にNULLをテストしないかもしれないことに注意してください。なぜなら、C++標準でうまく動作するからです。
削除後にrootを使用する必要があります。 –
これで、メソッドはうまくいきます: 'void DeleteChildren(){delete left;権利を削除する。 } ':)上記のメソッドとは異なり、' node!= NULL'をテストする必要があります – demi