今日题解第二弹!

树的宽度题解

题面

题意

已知一棵树,根的编号为 1 ,有 N 个结点,编号 1N ,求树的宽度。

什么是树的宽度

在正式分析之前,我们需要了解树的宽度的定义:树的宽度即为树中节点数最多的一层的节点数
例如这棵树:

我们遍历这棵树的每一层,标出每一层的宽度,然后找出最大的:

由此可见,第三层的宽度即为树的宽度。

题目解析

思路:使用 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~~

9 个赞

很好的题解
思路清晰,有图注释帮助理解
代码部分给出了框架和思路,帮助独立思考
不知道为什么会被举报为“垃圾信息” :smiling_face_with_tear:
加油 :+1: :+1: :+1:

4 个赞

谢谢

2 个赞