除了root之外,我需要删除前缀树的所有子节点。我不是在问任何代码。我只需要一个方法来遍历和删除树的所有子项。
答案 0 :(得分: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);
答案 1 :(得分:0)
编写一个方法delete
,它接受一个树节点:
for each child in node
call delete on child
remove child from node
free child
对于每个root用户,请调用此删除方法。
答案 2 :(得分:0)
有趣的是,你可能会做一些优雅 - 删除后可能不会使用树,所以你可以写一个节点的析构函数:
struct Node // Non-copyable!
{
Node *left, *right;
Node()
: left(NULL)
, right(NULL)
{
}
~Node()
{
delete left;
delete right;
}
};
就是这样!你使用它:delete root
。请注意,您可能不会在delete
之前测试NULL,因为它在C ++标准下运行良好(只是返回)。