题目描述
给出每个节点的两个儿子节点,建立一棵二叉树,如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6个结点。
传送门
这个是昨天做的一个题目,看到好多大犇分分钟AK全场,比赛的时候看了20分钟没看懂题意…(虽然当时有想法),哎~,以后有想法就得先尝试一下,万一对了呢!!!

个人觉得这个题目对这个输入的数据没有描述的清楚(可能就是用题意卡一部分人),我们可以从他给出的样例可以推测一下:
根节点就是1
然后添加1的左节点2,右节点7
然后添加2的左节点3,右节点6
然后添加3的左节点4,右节点5

观察可以发现这个值可能就是建树的编号,过程就是深搜+回溯

因此我就先统计共有多少组非两个数0,然后输出组数+1,交到oj对了2/5,从而个人觉得这个思路是么得问题的!!!

然后自己推测了另一组数据:
7
2 7
3 6
0 0
0 0
4 5
0 0
0 0

然后发现这组数据是不可行的…
因此又推测了一组数据:
7
2 5
3 4
0 0
0 0
6 7
0 0
0 0

这个的结果应该是3

写到这里,应该就可以发现就是下标作为父节点,值为节点的值,因此我们需要开两个个数组,分别存放右节点和左节点,然后直接dfs+回溯判断深度即可~

这个题最重要的应该是利用数组下标记录父节点,不然可能会超时,因为最多有10^6个节点。

AC以后看了一些AC代码,大犇用树状dp,还有一些与我类似的写法,大犇叫做记忆化搜索,原来下标记录法的dfs就是记忆化搜索~,又学到了!!!

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,t,ans;
vector<int>l,r;
void dfs(int now,int walk){if(l[now]==0&&r[now]==0){if(walk>ans) ans=walk;}else{dfs(l[now],walk+1);dfs(r[now],walk+1);}
}
int main(){l.push_back(0);r.push_back(0);scanf("%d",&n);for(int i=1;i<=n;i++){int ls,rs;scanf("%d%d",&ls,&rs);l.push_back(ls);r.push_back(rs);}dfs(1,1);printf("%d",ans);return 0;
} 

P4913 【深基16.例3】二叉树深度相关推荐

  1. 数据结构实验 5.二叉树深度

    [问题描述] 给定一棵二叉树,求该二叉树的深度. 二叉树深度定义:从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的节点个数为树的深度. [输入形式] 第一行是一个整数n,表示 ...

  2. python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想

    洛谷-P5727 [深基5.例3]冰雹猜想 给出一个正整数 \(n(n\le 100)\),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2.经过若干次循环 ...

  3. 以VGG为例,分析深度网络的计算量和参数量

    本文原载于https://imlogm.github.io,转载请注明出处~ 摘要:我第一次读到ResNet时,完全不敢相信152层的残差网络,竟然在时间复杂度(计算量)上和16层的VGG是一样大的. ...

  4. 计算二叉树深度算法(递归、非递归)入门详解

    一.引言 二叉树在应用时,经常需要知道二叉树的深度.二叉树的深度就是二叉树的层数,即从树根算起,到最底下一层的层数是多少,即二叉树中结点的最大层次值. 本文给出了计算二叉树深度的算法,包括递归算法和非 ...

  5. Day13——二叉树深度遍历的栈实现

    如果明白了之前递归深度遍历二叉树,那也能容易想到用栈实现二叉树深度遍历. 本篇博客以这棵树为例: 中序遍历 中序遍历顺序:左子树,当前结点,右子树. 从根结点A开始,先将它压栈,发现它有左孩子,则处理 ...

  6. 二叉树学习之二 二叉树深度与二叉树遍历

    介绍下二叉树深度: 首先写出二叉树的类 class TreeNode<E>{protected E element;//链式结点protected TreeNode<E> le ...

  7. 基于visual Studio2013解决面试题之0601二叉树深度

     题目 解决代码及点评 /*求二叉树深度 */#include <iostream> #include <stack> using namespace std;templ ...

  8. C#获取二叉树深度及分层遍历二叉树

    尝试了一下用C#写了一下二叉树的相关算法: 代码         #region 获取二叉树深度         static int z, d = 0;    //z用于记录遍历到某节点时的深度,d ...

  9. P5733 【深基6.例1】自动修正(C++、python代码)

    [深基6.例1]自动修正 - 洛谷 C++代码: /* P5733 [深基6.例1]自动修正 https://www.luogu.com.cn/problem/P5733 */ #include< ...

最新文章

  1. mybaits九:自定义结果映射规则
  2. Python主要智能优化算法库汇总
  3. [云炬创业基础笔记]第二章创业者测试8
  4. PHP中 base64_decode与base64_encode加密解密函数
  5. 安装Python package
  6. 安装oracle12.1  32位客户端时,出现[INS-10102]未能初始化安装程序错误
  7. SCVMM2012 SP1 之添加非受信任Hyper-V
  8. 允许计算机usb调试,usb调试不弹出授权,电脑一直弹出无法识别USB
  9. 重启网络显示:Device eth0 does not seem to be present,delaying initialization.
  10. 北洋降舰之鱼雷艇队 ZT
  11. untiy Socket通信一篇通
  12. Vue中添加背景图片
  13. 在Ubuntu-server下安装i3wm并简单配置
  14. 计算机学院开学标语,大学开学迎新标语
  15. 服务器攻击方式与查看服务器攻击日志的方法
  16. 硬盘数据丢失能恢复吗 硬盘数据丢失怎么找回
  17. Java_定时请求后端接口数据发送RabbitMQ消息到指定MQ服务器
  18. 2022华为杯A题思路分析移动场景超分辨定位问题
  19. 读 Eric S. Raymond 大教堂与市集
  20. vtk相机_VTK 相机类vtkCamera原理及用法

热门文章

  1. Keven 有一个矩形,长为 aa,宽为 bb,他希望将三个边长相等并且边长是正整数的正方形(牛客网题目)
  2. FFmpeg视频解码中的YUV420P格式
  3. DeFi热潮下的安全隐患:流动性危机恐将造成连锁反应 | 非正式会谈
  4. 任天堂官宣塞尔达传说新作:为新产品护航?
  5. 第五人格周四服务器维护中,第五人格本周四维护内容
  6. 10.24 每日学习打卡
  7. Hibernate错误:java.lang.NoClassDefFoundError: Could not initialize class com.zhbit.util.HibernateUtils
  8. 【新手提问导读】提问的艺术_提问的艺术
  9. 拼装机器人感想_拼装机器人 感受未来科技
  10. Python基础教程,Python入门教程