zoukankan      html  css  js  c++  java
  • 题解 P4913 【深基16.例3】二叉树深度

    第一次写树有关的题解,如果有不严谨的地方望指正

    首先让我们看题,题目说给出一棵树每个节点的儿子节点,如果是叶子节点就是0 0

    那么我们就可以直接暴力存下这颗树了

    开一个结构体,存当前节点的两个儿子

    然后一个一个的遍历树的节点(这里数据小并不用任何优化和算法)

    • 开一个数组dep记录当前深度
    • 每一个儿子节点x得到深度,都是由它的父亲贡献而来的,每往下搜一个节点,这dep[son[x].l]就是由 dep[x] + 1贡献来的
    • 搜它的儿子节点

    以上就是大概的思路了
    注意:初始深度一定要设为1,因为树根也是一层

    #include<bits/stdc++.h>
    using namespace std;
    int n, ans;
    int dep[100101];//存深度的数组
    struct fff{
        int l, r;
    }son[1001010];//存左右儿子的结构体
    void dfs (int x)
    {
        if (x == 0) return;//输入说了叶子节点是0,然而节点编号并没有0,所以可以大胆的遇到0就返回
        dep[son[x].l] = dep[x] + 1;
        dfs (son[x].l);//搜它的左儿子
        dep[son[x].r] = dep[x] + 1;
        dfs (son[x].r);//搜它的右儿子
    
    }
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i ++)
        {
            int x, y;
            cin >> x >> y;
            son[i].l = x, son[i].r = y;
         }
        dep[1] = 1;//初始深度
        dfs(1);
        for (int i = 1; i <= n; i ++)
        ans = max(dep[i], ans);
        //最大深度肯定是从所有深度中得来的,打一遍擂台即可
        cout << ans;//输出答案
        return 0;
    }
  • 相关阅读:
    [ZJOI2008]树的统计
    树链剖分总结
    动态主席树(带修改的区间第k大)(树套树)
    实现一个函数输入123456789,输出123,456,789”
    简单的requestAnimationFrame动画
    js的下拉刷新和上拉加载,基于iScroll v4.2.5
    深拷贝和浅拷贝
    js中this的指向
    创建对象的方法
    js继承的方式
  • 原文地址:https://www.cnblogs.com/liujunxi/p/13388936.html
Copyright © 2011-2022 走看看