这道题目的意思是,给定一棵树,要求找出所有满足以下两个条件的节点:
- 该节点不是叶子节点(度不为0)。
- 该节点下面所有的子树大小必须相同(如果下面只有一棵子树也默认为相同)。
为了解决这个问题,我们可以使用一种称为递归的算法。我们从根节点开始,递归遍历整棵树,对于每一个节点,我们先判断它是否为叶子节点,如果是,则跳过;如果不是,则遍历它的每一个子节点,统计它们的子树大小,并判断是否相等。如果相等,则将该节点加入结果集;如果不相等,则跳过该节点。
下面是一个简单的递归算法的代码实现:
``` void findNodes(Node* root, vector & res) { // 如果当前节点是叶子节点,则跳过 if (root->children.empty()) return;
bool equal =true;
int size = root->children[0]->size;
// 遍历当前节点的每一个子节点
for (int i = 1; i < root->children.size(); i++) {
// 如果有子树大小不相等,则退出循环
if (root->children[i]->size != size) {
equal = false;
break;
}
}
// 如果所有子树大小相