这道题的意思是,给定一棵有根树,找出所有满足以下条件的节点:
- 该节点不是叶子节点(度不为 0)。
- 该节点下面所有的子树大小必须相同(如果下面只有一棵子树也默认为相同)。
输入格式中给定了有 n 个顶点和 n-1 条边的信息,表示这是一棵有根树。接下来 n-1 行给出了边的信息,表示编号为 u 和编号为 v 的点之间有边相连,其中 u 是 v 的父亲节点。
为了解决这道题,我们需要遍历整棵树,对于每个节点都计算其子树大小,然后检查是否满足条件 1 和条件 2。
我们可以使用递归的方法来遍历树,对于每个节点,我们先统计它的子树大小,然后检查是否满足条件 1 和条件 2。如果满足条件,就将该节点加入答案中。然后再对该节点的每个子节点递归调用函数,继续遍历整棵树。
下面是参考代码:
def dfs(node, parent):
# 统计该节点的子树大小
size = 1
for child in children[node]:
if child == parent:
continue
size += dfs(child, node)