从树中去除顶点的算法

时间:2014-05-12 14:01:50

标签: algorithm tree graph-algorithm

当从树中移除顶点及其入射边时,会收集 小树仍然存在。编写一个算法,给定一个带有n的树的图形 顶点,找到一个顶点v,其删除不会留下超过n / 2的子树 顶点。

我尝试使用修改后的DFS方法以及网桥查找算法来解决此问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

创建一个递归函数,用于执行树的post-order traversal

该函数返回子树大小和顶点,或者顶点可以是全局的(在这种情况下,您只需设置它而不是返回它)。

调用root的函数。

  1. 在每个孩子的子树上调用该函数。

  2. 如果其中一个调用返回了一个顶点,则返回该顶点。

  3. 如果这些条件成立,则返回当前顶点:

    • 每个子树的子树都小于或等于n/2个顶点。

    • 子项的子树大小的总和大于或等于(n-1)/2,即上面的子树'当前小于或等于n/2个节点。

  4. 返回子项的子树大小+ 1的总和作为子树大小。

  5. 运行时间: O(n)

    我假设你已经拥有树的大小 - n - 如果没有,你需要从另一次遍历开始才能获得这个大小(这不是&和#39; t影响O(n)运行时间。