如何删除树的子项

How to delete children of a tree

本文关键字:删除 何删除      更新时间:2023-10-16

我需要删除前缀树中除根之外的所有子项。我不是在问任何代码。我只需要一种方法来遍历和删除树的所有子项。

您可以使用后序遍历遍历树并删除节点,如下所示:

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,它需要一个树节点:

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

对于根的每个子级,调用此删除方法。

有趣的是,你可以做一些优雅的 - 删除后树可能不会使用,所以你可以编写一个节点的析构函数:

struct Node // Non-copyable!
{
  Node *left, *right;
  Node()
    : left(NULL)
    , right(NULL)
  {
  }
  ~Node()
  {
    delete left;
    delete right;
  }
};

仅此而已!你使用它:delete root .请注意,您不能在delete之前测试 NULL,因为它按照标准运行良好(只需返回C++)。