如何删除树的子项

时间:2012-05-05 13:02:22

标签: c++ algorithm tree theory prefix-tree

除了root之外,我需要删除前缀树的所有子节点。我不是在问任何代码。我只需要一个方法来遍历和删除树的所有子项。

3 个答案:

答案 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 ++标准下运行良好(只是返回)。