1 题目描述

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

2 思路和方法

  深度优先搜索,每次得到左右子树当前最大路径,选择其中较大者并回溯。int len = left>right?left+1:right+1;    // 当前最大路径

3 C++ 核心代码

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
if (pRoot == nullptr)
return ;
int left = TreeDepth(pRoot->left);
int right = TreeDepth(pRoot->right);
int maxLen = left>right?left+:right+; // 当前最大路径 return maxLen;
}
};

4 C++完整代码

 /*

 输入:
第一行输入有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
*/
/* 思路: 用递归,根节点的深度等于max(左孩子的深度,右孩子的深度)。
*/ //此题用数组存储树节点 #include<stdio.h>
#include<stdlib.h>
struct TreeNode{
int pLeftChild;
int pRightChild;
};
//递归实现
int depthInBTree(TreeNode* pRoot, int index){
if (pRoot == NULL || index == -){//直到左右孩子时,返回0
return ;
}
int leftDepth = depthInBTree(pRoot, pRoot[index].pLeftChild);
int rightDepth = depthInBTree(pRoot, pRoot[index].pRightChild);
return (leftDepth>rightDepth ? leftDepth : rightDepth) + ;
}
int main(void){
int n;
while (scanf("%d", &n) != EOF&&n> && n <= ){
TreeNode *pRoot = (TreeNode *)malloc(n*sizeof(TreeNode));
if (pRoot == NULL){
exit(EXIT_FAILURE); }
for (int i = ; i<n; i++){
int leftIndex;
int rightIndex;
scanf("%d%d", &leftIndex, &rightIndex);
if (leftIndex != -){
pRoot[i].pLeftChild = leftIndex - ;
}
else{
pRoot[i].pLeftChild = -;
}
if (rightIndex != -){
pRoot[i].pRightChild = rightIndex - ;
}
else{
pRoot[i].pRightChild = -;
}
} int depth = depthInBTree(pRoot, );
printf("%d\n", depth); } system("pause");
return ;
}

参考资料

https://blog.csdn.net/libin1105/article/details/48395021

剑指offer38:输入一棵二叉树,求该树的深度的更多相关文章

  1. 剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 2 思路和方法 (1)先在A中找和B的根节点相同的结点 (2)找到之后遍历对应位置的其他结点, ...

  2. 二叉树的深度(剑指offer-38)

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 递归解析: 思路: 从根节点出发,查询左子树的深度,获取右子树的深度 ...

  3. 剑指Offer - 九度1350 - 二叉树的深度

    剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...

  4. 剑指offer【08】- 二叉树的深度(java)

    题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题, ...

  5. 【剑指offer】55 - I. 二叉树的深度

    剑指 Offer 55 - I. 二叉树的深度 知识点:二叉树,递归 题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树 ...

  6. 剑指Offer - 九度1521 - 二叉树的镜像

    剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...

  7. [剑指 Offer 28. 对称的二叉树]

    剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...

  8. 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)

    问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下: public class Tree ...

  9. 剑指offer(38)二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目分析 树的深度=左子树的深度和右子树深度中最大者+1 代码 fu ...

随机推荐

  1. sigaction()函数

    sigaction函数 修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数) int sigaction(int signum, const struct sigaction *act, ...

  2. 最简单的babel+webpack配置

    首先先介绍一下2个重要的库:core-js 和 regenerator core-js core-js 是用于 JavaScript 的组合式标准化库,它包含 es5 (e.g: object.fre ...

  3. masm 编译贪吃蛇游戏

    code: ;TITLE GAME4TH PAGE , STSEG SEGMENT DB DUP () STSEG ENDS ;----------------------------------- ...

  4. Linux设备驱动程序 之 中断下半部

    中断处理程序的局限 1. 中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行,因此,为了避免被打段的代码停止时间过长,中断处理程序应该执行的越快越好: 2. 如果当前有一个中断处理程序 ...

  5. 【matlab】模拟变焦拼接代码备份

    1.初版,边缘未处理. % % In----near % If----far % In=imread('D:\文件及下载相关\桌面\模拟变焦拼接\Matlab_code\nearframe\frame ...

  6. SQL-W3School-基础:SQL INSERT INTO 语句

    ylbtech-SQL-W3School-基础:SQL INSERT INTO 语句 1.返回顶部 1. INSERT INTO 语句 INSERT INTO 语句用于向表格中插入新的行. 语法 IN ...

  7. 安装SQL server 提示重新启动计算机失败

    SQL Server2008是一款功能强大.实用性强的mysql数据库管理系统,因此很多用户都会在Win7系统中安装SQL Server2008,但是不少用户在安装过程中遇到问题,安装SQL Serv ...

  8. nc简单使用

    1.安装 2.运行

  9. Jmeter之分布式部署测试

    在使用Jmeter进行性能测试时,因受单机电脑的配置限制,可能无法支持较大数量的并发,此时就需要使用Jmeter提供的分布式测试的功能. jmeter分布式测试的执行原理是选择一台作为调度机,其他机器 ...

  10. Excel导入工具类

    项目需要从Excel导入数据,然后插入到数据库对应表中.设计了一个导入工具类,导入数据和导入结果如下图示: poi jar版本采用的3.15 导入工具类实现如下: package com.alphaj ...