当前位置: 首页 > 知识库问答 >
问题:

有效地从 n 元树中删除节点列表

温翔宇
2023-03-14

我有游戏对象的n-ary树。用户随机选择树中的一些对象并想要删除。问题在于,有些对象是另一个对象的子对象。事实证明,每次删除层次结构中的节点后,我必须遍历所有选定的节点并将其删除。算法是否比 O (n^2) 快?

upd:为了更清楚我需要什么,我写了伪代码

struct TreeNode
{
    vector<TreeNode*> childs;
};

void removeNodeHierarchy(list<TreeNode*>& nodes, TreeNode *n)
{
    for(TreeNode *child : n->childs())
        removeNodeHierarchy(nodes, child);

    nodes.remove(n); // complexity nodes.size()
    delete n;
}

// The function I'm trying to write 
// Problem: Total complexity = nodes.size() * nodes.size()
void removeNodes(list<TreeNode*>& nodes, TreeNode *root)
{
    while (!nodes.empty()) // complexity nodes.size()
    {
        TreeNode *n = nodes.first();
        removeNodeHierarchy(nodes, n);
    }
}

void main()
{
    TreeNode *tree = ...
    list<TreeNode*> nodes = ...

    removeNodes(nodes, tree);
}

共有1个答案

陆绪
2023-03-14

为了搜索该节点,它将带你O(n^d),其中d是树的深度。因此,如果d

 类似资料:
  • 本文向大家介绍删除Javascript树中的节点,包括了删除Javascript树中的节点的使用技巧和注意事项,需要的朋友参考一下 如果从远处看,从树中删除节点非常复杂。删除节点时需要考虑3种情况。这些在以下功能的注释中提到。正如我们之前所做的那样,我们将在类中创建一个方法和一个递归调用的助手。 类方法 辅助方法 您可以使用以下方式进行测试:  示例 输出结果 这将给出输出-

  • 给定一个链表和一个指定的数据值,我想递归地删除包含所述数据的所有节点。(我已经找到了迭代的方法,但我想这样做)。我已将我的结构定义为: 为了删除,我做了这个助手函数,它(应该)返回指向我删除列表的头节点的指针: 然后我想在我的实际列表中使用它: 但这不起作用。看起来我的助手函数实际上不起作用,但我无法理解。出什么事了?

  • 问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题

  • 问题内容: 在使用Jenkins Docker插件时,可能由于错误而导致无法启动群集。我没有注意,目前有数千个脱机节点无法启动。 底线-是否可以批量删除Jenkin中的节点(从属),清理所有脱机节点甚至删除所有节点?重置Jenkins服务器没有帮助,而且我在Jenkins API中找不到方法。 在我开始编写Selenium脚本之类的东西之前,请感谢任何想法。 非常感谢! 问题答案: 该脚本的注释部

  • 我尝试使用下面的代码从XML下面删除scheme-details1,但无法删除。 其中是。 以下是我的XML响应:-

  • 如何从kubernetes节点中删除所有内容? 内容包括部署、副本集等。我试图单独删除deplyoments。但是kubernetes重新创建了所有的豆荚。 有什么方法可以删除节点中存在的所有副本集吗?