【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
- 题目描述:
-
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
- 输入:
-
第一行输入有n,n表示结点数,结点号从1到n。根结点为1。 n <= 10。
接下来有n行,每行有两个个整型a和b,表示第i个节点的左右孩子孩子。a为左孩子,b为右孩子。当a为-1时,没有左孩子。当b为-1时,没有右孩子。
- 输出:
-
输出一个整型,表示树的深度。
样例输入:
3
2 3
-1 -1
-1 -1
样例输出:
2
【解题思路】本题应该是传统题,直接用dfs就能解决。难点在于树的构建和根结点的寻找。
AC code:
#include <cstdio>
#include <vector>
using namespace std; struct tr
{
int lc,rc;
}; void dfs(const vector<tr> &tre,const int& id,int &maxcnt,int &cnt)
{
++cnt;
if(tre[id].lc==-1 && tre[id].rc==-1)
{
if(cnt>maxcnt) maxcnt=cnt;
return ;
}
if(tre[id].lc!=-1) {dfs(tre,tre[id].lc,maxcnt,cnt);--cnt;}
if(tre[id].rc!=-1) {dfs(tre,tre[id].rc,maxcnt,cnt);--cnt;}
} int main()
{
int n,a,b;
scanf("%d",&n);
vector<tr> tre(n+1);
vector<int> vecidx(n+1,0);
tr rt;
for(int i=1;i<=n;++i)
{
scanf("%d%d",&rt.lc,&rt.rc);
tre[i]=rt;
if(rt.lc!=-1)vecidx[rt.lc]=1;
if(rt.rc!=-1)vecidx[rt.rc]=1;
}
int i=1;
for(;i<=n;++i)
if(vecidx[i]==0) break;
int maxcnt=0,cnt=0;
if(n!=0) dfs(tre,i,maxcnt,cnt);
printf("%d\n",maxcnt);
return 0;
}
/**************************************************************
Problem: 1350
User: huo_yao
Language: C++
Result: Accepted
Time:0 ms
Memory:1052 kb
****************************************************************/
【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ的更多相关文章
- 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 【剑指Offer面试编程题】题目1508:把字符串转换成整数--九度OJ
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n&l ...
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个 ...
- 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ
题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...
- 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...
- 【剑指Offer面试编程题】题目1354:和为S的连续正数序列--九度OJ
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...
随机推荐
- dk7和jdk8的一些新特性
本文是我学习了解了j 的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwork/java/javase/jdk7-relnotes- ...
- [PHP]新版的mongodb扩展安装和使用
旧版的mongo扩展已经不推荐使用了,在php7以上一般是安装和使用新版的mongodb扩展 ubuntu下 apt-get install php-mongodb 例如下面的代码进行了查询和插入集合 ...
- Vue - 让水平滚动条(scroll bar)固定在浏览器的底部
效果 踩坑经历 TLDR; 在几个小时的google和stack overflow的苦苦搜索后,无果. 经过自我思考,想到了一种实现方法: 整个页面是一个盒子,要出现滚动条,必然里面的元素要溢出.也即 ...
- Sunday算法浅谈
一.Sunday算法简介 Sunday算法在我看来比起Kmp和bm都更加容易理解,代码实现也更加简洁.Sunday算法由Daniel M.Sunday在1990年提出,它的思想跟BM算法很相似只不过S ...
- [C++_QT] 代码中不能有中文的解决方案 换行符问题
#开始 今天开始入坑QT了 似乎是个高大上的东西,师傅一直建议我学这个 (如果用C++做界面的话) 配置好环境之后写了代码运行没问题 但是添加了中文字符之后就 die 了,这个问题的话 LInux上的 ...
- 【前端开发API】豆瓣开放API
转载:https://www.cnblogs.com/HuangJie-sol/articles/10884622.html#_label6 阅读目录 前言 具体api 1.正在热映 2.即将上映 3 ...
- 树莓派安装ubuntu_meta并配置开发环境
1.烧录系统 首先准备好我们要烧录的ubuntu_meta系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/ 这里我们选择 Raspberry P ...
- 计算机二级C语言选择题错题知识点记录。
计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...
- idea如何提取变量(拆分变量赋值和声明)
需求描述: 我们时常遇到某个在某个局部作用域声明的变量,想要用在另一个地方,此时就需要在作用域外部声明变量,在作用域中给变量赋值. 在eclipse中这个功能和提取变量在一起,我们可以方便的拆分变量的 ...
- CSS中 - display: inline-block
参考 https://stackoverflow.com/questions/9189810/css-display-inline-vs-inline-block An inline-block el ...