【剑指offer】二叉树深度

【剑指offer】二叉树深度

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27249675

题目描写叙述:

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

输入:

第一行输入有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

    之前在Cracking the Coding interview中有一道依据给定有序数组,创建一个高度最小的二叉树的题目,最后要写个求高度的函数,与这道题一样。这是这次用数组存储二叉树,在九度OJ上AC。

    思路非常easy,递归实现,代码例如以下:

#include<stdio.h>
#include<stdlib.h>


typedef struct BTNode
{
	int data;
	int rchild;
	int lchild;
}BTNode;

int max(int a,int b)
{
	return a>b ? a:b;
}

/*
求二叉树的深度
*/
int TreeDepth(BTNode *pTree,int index)
{
	if(pTree == NULL)
		return 0;

	if(index == -1)
		return 0;
	else
		return max(TreeDepth(pTree,pTree[index].lchild),TreeDepth(pTree,pTree[index].rchild)) + 1;
}


int main()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		BTNode *pTree = NULL;
		if(n>0)
		{
			pTree = (BTNode *)malloc(n*sizeof(BTNode));
			if(pTree == NULL)
				exit(EXIT_FAILURE);
			int i;
			//输入n个节点的data
			for(i=0;i<n;i++)
			{
				int data1,data2;
				scanf("%d %d",&data1,&data2);
				if(data1 != -1)
					pTree[i].lchild = data1-1;
				else
					pTree[i].lchild = -1;
				if(data2 != -1)
					pTree[i].rchild = data2-1;
				else
					pTree[i].rchild = -1;
			}
		}
		printf("%d",TreeDepth(pTree,0));
	}
	return 0;
}
/**************************************************************
    
Problem: 1350
    
User: mmc_maodun
    
Language: C
    
Result: Accepted
    
Time:0 ms
    
Memory:912 kb
****************************************************************/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109710.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解独立成分分析

    详解独立成分分析最近在学习数据降维的一些方法(有关数据降维的其他内容请看这篇文章),虽然独立成分分析不算是严格意义上的降维方法,但是它和PCA有着千丝万缕的联系,所以打算专门写一篇文章来学习ICA的相关知识,看了挺多的关于ICA的博文,有些文章讲的比较详细。有句话是这么说的:“论文是详细版的知识讲解”,也就是说如果想深入详细的了解某个知识,那么去读相关论文,所以阅读了一篇经典的ICA论文,作者是A.Hyva¨r…

    2022年5月17日
    40
  • ffmpeg安装教程win10_windows10我的电脑在哪

    ffmpeg安装教程win10_windows10我的电脑在哪FFmpeg命令行安装使用如下命令进行FFmpeg:sudoapt-getinstallffmpegFFmpeg源码安装FFmpeg源码获取使用如下命令获取ffmpeg的源码:gitclonehttps://git.ffmpeg.org/ffmpeg.gitffmpegffmpeg编译使用如下命令指定安装目录:./configure–prefix=/usr/local/ffmpeg–enable-debug=3–enable-shared–disa

    2022年9月13日
    1
  • 数据库的唯一索引_数据库唯一索引是什么

    数据库的唯一索引_数据库唯一索引是什么唯一索引是不允许表中任何两行具有相同索引值的索引。  当现有的数据中存在重复的键值时,大多数数据库不允许把新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键

    2022年9月19日
    3
  • java maven 安装

    java maven 安装

    2021年6月13日
    113
  • android移动点餐系统内容和要求,基于Android云计算的移动点餐系统

    android移动点餐系统内容和要求,基于Android云计算的移动点餐系统摘要:系统发挥Android富有创造力和想象力的云应用开发,实现一套Android客户端软件和完善的后台服务功能来完成点餐功能。该系统主要包括后台数据库服务器、WEB服务器、无线网络、Android前端等部分。客户端Android系统智能手机具有前端处理与计算能力,而且通过无线网络访问WEB服务器,如果需要数据访问,则访问后台数据库。介绍了系统架构的设计与搭建、技术选型、后台数据库的…

    2022年6月20日
    34
  • 电脑组装机知识_电脑组装入门知识

    电脑组装机知识_电脑组装入门知识“玩的次数多了自然就会了”笔者一直都对这句话深信不疑,小编我也是一个爱玩的人,从小参加各种极限运动,上学逃课去网吧,下课依然逃课去网吧!而现在上班了玩DIY,下班了玩车。不过玩什么之前都有一段入门的过程,没有人天生就会,DIY也一样刚开始也有一个学习的过程,今天笔者就带想入门的DIY玩家从最基础的硬件配置开始入门的旅程!广大的骨灰级玩家,在此文章中会有不少最为基础的介绍,若有问题的还请大家多多吐槽…

    2025年8月26日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号