[洛谷]【深基16.例3】二叉树深度

news2025/1/16 1:41:28

一、题目描述

题目描述

有一个 n ( n ≤ 1 0 6 ) n(n \le 10^6) n(n106) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过 n n n),建立一棵二叉树(根节点的编号为 1 1 1),如果是叶子结点,则输入 0 0

建好这棵二叉树之后,请求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

输入格式

第一行一个整数 n n n,表示结点数。

之后 n n n 行,第 i i i 行两个整数 l l l r r r,分别表示结点 i i i 的左右子结点编号。若 l = 0 l=0 l=0 则表示无左子结点, r = 0 r=0 r=0 同理。

输出格式

一个整数,表示最大结点深度。

样例 #1

样例输入 #1

7
2 7
3 6
4 5
0 0
0 0
0 0
0 0

样例输出 #1

4

二、算法分析

1、算法标签

二叉树本质是一个有向无环图,因此这道题考察的是图的存储以及深度优先遍历(DFS)

2、算法分析

由于是二叉树,所以是一个稀疏图,稀疏图可以用邻接表的方式来存。因此,我们提前开辟一个邻接表来存储二叉树。

接着就是本道题的关键,深度优先搜索的书写。

其实就是一个递归函数的书写。书写递归函数之前, 我们要首先弄清一件事,这个 d f s dfs dfs函数的作用是什么?而这个作用一般情况下来源于我们的问题。问题中提到的最大深度,其实就是根节点加上最高的子树高度。因此,我们的 d f s dfs dfs函数的作用就是:求出子树中最高的高度。

而我们神奇地发现,子树的最大高度又可以写成1+子树的子树的最大高度。从这里开始,就出现了递归的迹象。

因此,我们只需要去循环遍历每一棵子树,然后再比较出一个最大值,然后返回这个最大值。如果我们遍历到了叶子节点,他们没有子树,因此直接返回1。

三、代码示例

#include<iostream>
#include<cstring>
using namespace std;
const int N=1e6+10,M=3*N;
int h[N],e[M],ne[M],idx;
int n,ans;
void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfs(int u)
{
    if(h[u]==-1)return 1;
    int deep=0;
    for(int i=h[u];i!=-1;i=ne[i])
    {
        deep=max(deep,dfs(e[i])+1);
    }
    return deep;   
}
int main()
{
    memset(h,-1,sizeof h);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(x)add(i,x);
        if(y)add(i,y);
    }
    cout<<dfs(1)<<endl;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实测 | 海纳百川,华为OceanStor Pacific分布式存储为多元算力应用带来更优选择...

被称为开眼看世界的林则徐&#xff0c;在自己的书房中写了这样一副对联&#xff0c;以做自勉&#xff1a;海纳百川&#xff0c;有容乃大&#xff0c;壁立千仞&#xff0c;无欲则刚。包容的胸怀是我们做成很多事情的根基&#xff0c;也是一项产业战略、科技事业发展的关键。近几…

数据开源 | Magic Data开源基于ChatGPT的可扩展的对话数据集

在过去的一月里&#xff0c;人工智能领域中最火的话题莫过"ChatGPT"。ChatGPT是OpenAI于11月30日发布最新作品聊天机器人&#xff0c;开放公众免费测试。聊天机器人是一种软件应用程序&#xff0c;根据用户的提问做出回应、模仿人类的对话方式。目前&#xff0c;Chat…

做好程序中的axios错误提示

今天外包组的项目客户反馈老是出错&#xff0c;一看页面卡在加载数据过程中&#xff0c;前后台分离之后&#xff0c;页面变得很奇怪&#xff0c;脸面都出来了&#xff0c;就是没有具体值。 初级程序员在很长一段时间要经历一个升级过程&#xff0c;写的程序首先是写画面&#…

散户如何进行开展量化股票交易的?

散户如何进行开展量化股票交易的&#xff1f;也就是投资者交易的条件&#xff0c;达到了投资者设定的条件时候&#xff0c;系统接口就会自动交易&#xff0c;下面来看看具体的流程&#xff1a; 依据个股的历史记录&#xff0c;进行多因子选股&#xff0c;比如&#xff0c;把市…

Rasa 基于知识库的问答 音乐百科机器人

文章目录1. 使用 ActionQueryKnowledgeBase创建知识库NLU数据2. 音乐机器人nlu.ymlstories.ymlrules.ymldomain.ymlconfig.ymlendpoints.ymldata.json自定义动作 actions.py测试使用Neo4jlearn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code 机器人返回了…

从“小螺栓血案”谈装配体模型连接螺栓6个正确的处理方法

经调查发现&#xff1a;“江苏启安建设工程有限公司提供了支吊架膨胀螺栓计算书&#xff0c;但计算书上无企业相关人员签字&#xff0c;未经监理单位审核同意&#xff0c;未报施工总包单位&#xff0c;未经设计单位审定&#xff1b;计算书认为支吊架应采用直径为12mm 的膨胀螺栓…

成为全栈程序员太难了?这个低代码高效率的报表工具绝对不能错过

现在程序员有个很奇怪的归宿&#xff0c;就是都在主动或被动地成为全栈程序员。前端被要求写后端的代码&#xff0c;后端被要求能看懂前端&#xff0c;美名其曰加速成长或为老板省钱&#xff01; 但一个人能做到全栈真的很难&#xff01;就拿报表开发而言&#xff0c;学习整个…

朴素贝叶斯

概要 前文介绍了贝叶斯公式基础以及在统计领域的基本应用贝叶斯基础_zhanglehes的博客-CSDN博客&#xff0c;本文将介绍它的一种新的转换形式&#xff0c;以及在机器分类领域的应用。 分类的数学描述 朴素贝叶斯公式推理 贝叶斯公式 在分类领域&#xff0c;将其改写如下 我们…

在conda虚拟环境中安装OpenCv并在pycharm中使用

目录 一. 在下面的网站中下载OpenCV文件 二. 在虚拟环境中使用pip安装该文件 三、官网下载OpenCV源代码&#xff08;后续使用&#xff09; 四、pycharm中打开该虚拟环境 五、安装numpy和matplotlib 六、pycharm找不到cv2模块解决&#xff1a; 七、在pyhcharm中使用cv不自…

在服务器安装jupyter并在本地访问

一、安装 1.1安装jupyter notebook pip install jupyter1.2安装jupyter lab pip install jupyterlab # 中文界面包 pip install jupyterlab-language-pack-zh-CN二、本地使用 我们在远程登录Linux服务器时&#xff0c;经常希望在本地浏览器端打开jupyter notebook&#xff…

需求的收集,筛选和排序

对需求的把握是否准确&#xff0c;很大程度上决定了产品的成与败&#xff0c;需求分析对于产品经理是必须要掌握的技能&#xff0c;接下来聊下需求收集的目标和方式。 一、收集渠道&#xff1a; 1、用户反馈&#xff1a; 用户提出的反馈有可能也是我们没有意识到的问题&#…

SMT工厂及PCB工程师的福音!可视化BOM交互焊接工具来了

目前电子产品已经渗透到我们生活的各个角落&#xff0c;其产品涵盖通信、医疗、计算机及周边视听产品、玩具、家用电器、军工用品等。关于电子产品的PCBA焊接&#xff0c;在试样阶段一般采用手工焊接。手工焊接的好处是成本低&#xff0c;一把电络铁就搞定了&#xff0c;如果样…

记一次简单的白加黑测试

前一阵子成了小洋人&#xff0c;所以很长的时间也没更新了&#xff0c;今天更一篇PHP代码审计的吧&#xff0c;此次分享的内容十分的简单&#xff0c;大家简单的看看即可 命令注入 -1 从上述代码&#xff0c;我们可以看出来&#xff0c;$ip变量接收过来之后通过合并运算符(??…

【OpenCV-Python】教程:7-3 理解KMeans

OpenCV Python KMeans 的理解 【目标】 理解KMeans聚类的基础概念KMeans是如何工作的&#xff0c; 【理论】 Tshirt尺寸问题 有个公司&#xff0c;打算投放一批T-shirt到市场上售卖&#xff0c;但是不知道人们需要什么样的尺寸&#xff0c;而且工厂也不会制作所有的尺寸样…

联想C2E摄像头的折腾

背景 老苏的巨峰摄像头坏了&#xff0c;一直也没在意&#xff0c;因为监控也不是什么刚需。朋友送的&#xff0c;比较古老&#xff0c;不像现在的家用监控摄像头&#xff0c;都有 app&#xff0c;而这台巨峰摄像头不光不支持 app&#xff0c;后台设置还只能用 IE&#xff0c;因…

OLSR路由协议学习

OLSR路由协议概述两种分组路由发现与维护算法步骤链路感知邻居侦听MPR选择拓扑建立路由表的建立与维护总结概述 优化链路状态路由&#xff08;Optimized Link State Routing&#xff09;协议&#xff0c;即 OLSR 路由协议是一种平面拓扑的先验式路由协议&#xff08;主动式路由…

使用mosquitto部署MQTT服务

本次实验使用版本&#xff1a;mosquitto-1.6.7 查看版本命令&#xff1a;mosquitto -v 1安装 make && make install&#xff0c;安装mosquitto。 安装完毕后放开防火墙 查看防火墙某个端口是否开放 firewall-cmd --query-port1883/tcp 开放防火墙端口80 firewall-…

BHG Mall超级宠粉节攻略收藏,商业IP化出圈新玩法

购物中心作为人们生活的第三空间&#xff0c;除了满足物质需求外&#xff0c;是人们精神消费的最主要空间之一。中国连锁经营协会发布《中国购物中心对经济社会发展贡献力报告》&#xff0c;报告中显示&#xff0c;购物中心不断转变&#xff0c;发展成为城市能够识别时代精神符…

关于我转行嵌入式的那些事

文章目录**为什么想转行了&#xff1f;****一、工作环境问题****二、无休止的出差加班和混乱的作息时间****三、工作压力大****四、薪资上限低&#xff0c;行业前景差****为什么选择嵌入式****转行前的学习****一、单片机开发****二、Linux应用开发****三、Linux驱动开发和Andr…

高校GIS系统有何作用?

根据高校信息化管理平台的基本建设&#xff0c;全方位提高数据服务团体的管理服务质量。根据综合性平台全方位地服务项目出示&#xff0c;更为全方位地掌握老师学生的主题活动特性&#xff0c;并根据云计算技术对老师学生的个人行为数据信息开展发掘剖析&#xff0c;进而精确掌…