当从树中移除顶点及其入射边时,会收集 小树仍然存在。编写一个算法,给定一个带有n的树的图形 顶点,找到一个顶点v,其删除不会留下超过n / 2的子树 顶点。
我尝试使用修改后的DFS方法以及网桥查找算法来解决此问题。任何帮助将不胜感激。
答案 0 :(得分:1)
创建一个递归函数,用于执行树的post-order traversal。
该函数返回子树大小和顶点,或者顶点可以是全局的(在这种情况下,您只需设置它而不是返回它)。
调用root的函数。
在每个孩子的子树上调用该函数。
如果其中一个调用返回了一个顶点,则返回该顶点。
如果这些条件成立,则返回当前顶点:
每个子树的子树都小于或等于n/2
个顶点。
子项的子树大小的总和大于或等于(n-1)/2
,即上面的子树'当前小于或等于n/2
个节点。
返回子项的子树大小+ 1的总和作为子树大小。
运行时间: O(n)
。
我假设你已经拥有树的大小 - n
- 如果没有,你需要从另一次遍历开始才能获得这个大小(这不是&和#39; t影响O(n)
运行时间。