树的宽度题解
题意
已知一棵树,根的编号为 1 ,有 N 个结点,编号 1 至 N ,求树的宽度。
什么是树的宽度
在正式分析之前,我们需要了解树的宽度的定义:树的宽度即为树中节点数最多的一层的节点数
例如这棵树:
我们遍历这棵树的每一层,标出每一层的宽度,然后找出最大的:
由此可见,第三层的宽度即为树的宽度。
题目解析
思路:使用 dfs 遍历树,新增一个参数 k 来记录当前节点所在的层数,每次遍历到一个新的节点就把 ans[k]++ , ans[k] 表示第 k 层的节点数:
void dfs(int id, int k)
{
// 计数
for(int i = 1; i <= n; i++)
{
if(/* 这个节点不合法*/)
{
continue;
}
// 标记,递归
}
}
主函数:
int main()
{
// 输入
// 标记并调用函数
for(int i = 1; i <= n; i++)
{
// 寻找节点数最多的一层
}
cout << mx;
return 0;
}
bye~~

