剑指Offer - 九度1350 - 二叉树的深度
2013-11-23 00:54
题目描述:

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

输入:

第一行输入有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。
  递归关系为:
    max_depth(NULL) = 0;
    max_depth(r) = max(max_depth(r->left), max_depth(r->right)) + 1;
  实际上由于树的节点个数一开始就指定了,所以直接用数组存数据,用下标当指针就行了,coding更方便。题目中节点数n的数据范围居然只有10,我都怀疑应该是10000或者1000错写成10了。
  但有一点要注意,根节点如果不指定为1的话,是需要我们自己去判断哪个是根节点的。对于任何树结构,都只有根节点的入度为零,因为没有节点指向根节点。找出根节点才能去递归。
  每个节点遍历一次,时间复杂度O(n)。节点数据都要存起来,空间复杂度O(n)。
 // 654348    zhuli19901106    1350    Accepted    点击此处查看所有case的执行结果    1020KB    982B    0MS
//
#include <cstdio>
using namespace std; int mymax(const int &a, const int &b)
{
return a > b ? a : b;
} int max_depth(const int a[][], int r)
{
if(a == NULL || r < ){
return ;
} return mymax(max_depth(a, a[r][]), max_depth(a, a[r][])) + ;
} int main()
{
const int MAXN = ;
int a[MAXN][];
int in_degree[MAXN];
int i, n; while(scanf("%d", &n) == ){
if(n < ){
printf("0\n");
continue;
} for(i = ; i <= n; ++i){
in_degree[i] = ;
} for(i = ; i <= n; ++i){
scanf("%d%d", &a[i][], &a[i][]);
if(a[i][] >= && a[i][] <= n){
++in_degree[a[i][]];
}
if(a[i][] >= && a[i][] <= n){
++in_degree[a[i][]];
}
} for(i = ; i <= n; ++i){
if(in_degree[i] == ){
break;
}
}
printf("%d\n", max_depth(a, i));
} return ;
}

最新文章

  1. 深入学习jQuery节点关系
  2. Xrm.Utility.openEntityForm 时404.15 maxQueryString 错误 和 长度超过maxQueryStringLength值 错误
  3. ios 单一线程中的Runloop机制会导致线程安全问题吗?
  4. didFinishLaunchingWithOptions
  5. Data Plane Development Kit (DPDK): Getting Started
  6. 【Subsets II】cpp
  7. 使用 Spring 2.5 基于注解驱动的 Spring MVC
  8. ODI Studio拓扑结构的创建与配置(Oracle)
  9. Selenium: 空指针error
  10. openstack私有云布署实践【16.3 Windows Server2008 R2 只有C盘分区镜像制作】
  11. Linux修改IP,DNS和网关
  12. Smrty模版总结(转)
  13. 熟悉的“if __name__ == &#39;__main__&#39;:”究竟是啥?
  14. Boyer-Moore算法
  15. 小甲鱼Python第二十三讲课后习题--025,字典
  16. Apache JMeter的基本使用
  17. JAVA WEB 三器之过滤器(Filter)
  18. JAVA-数据库之添加记录
  19. CAS (11) —— CAS TicketRegistry使用Ehcache的集群方案
  20. Python Django 前后端数据交互 之 HTTP协议下GET与POST的区别

热门文章

  1. 利用C语言编辑画图程序的实现方法
  2. IOS instancetype的使用好处
  3. robotframework实战三--自定义关键字
  4. codeforces 600E Lomsat gelral
  5. 一个TCP的问题,所谓TCP面向连接的虚电路到底是怎么实现的?
  6. base64模块的使用及python中的使用
  7. 瓣呀,一个基于豆瓣api仿网易云音乐的开源项目
  8. django+xadmin在线教育平台(十一)
  9. 使用Docker 一键部署 LNMP+Redis 环境
  10. Python中的文件和目录操作实现