如何删除树的子项
How to delete children of a tree
我需要删除前缀树中除根之外的所有子项。我不是在问任何代码。我只需要一种方法来遍历和删除树的所有子项。
您可以使用后序遍历遍历树并删除节点,如下所示:
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++)。
相关文章:
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- C++链表删除和删除返回功能
- 从链表中删除值/删除未动态分配的值
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 如何在 C++ 中使用删除运算符删除单个数据
- 为什么擦除+删除比删除更有效
- 用户使用C++中的删除功能删除文件
- 删除和删除[]在内部如何工作?
- 当删除或删除[]被执行时,计算机会做什么?
- 如何在不删除C++集中删除项目?
- 如何在C 中删除或删除.jpg和.dpx图像文件
- 删除或删除 [] 在新的 int[][] 上
- 在 C++ 中使用 try-catch 进行删除 [] 或删除操作是否必要
- C++删除和删除中的逻辑[]
- 是否有任何工具可以警告可能滥用删除或删除[]
- 在函数调用中堆和删除.如何删除本地动态内存
- 删除[]与删除在for循环中
- 使用单个删除运算符删除多个指针
- 如何替换删除和删除[]
- Qt;Q删除和删除小部件.setParent(NULL)是必需的