剑指offer38:输入一棵二叉树,求该树的深度
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:输入一棵二叉树,求该树的深度的更多相关文章
- 剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 2 思路和方法 (1)先在A中找和B的根节点相同的结点 (2)找到之后遍历对应位置的其他结点, ...
- 二叉树的深度(剑指offer-38)
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 递归解析: 思路: 从根节点出发,查询左子树的深度,获取右子树的深度 ...
- 剑指Offer - 九度1350 - 二叉树的深度
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...
- 剑指offer【08】- 二叉树的深度(java)
题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题, ...
- 【剑指offer】55 - I. 二叉树的深度
剑指 Offer 55 - I. 二叉树的深度 知识点:二叉树,递归 题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树 ...
- 剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...
- [剑指 Offer 28. 对称的二叉树]
剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下: public class Tree ...
- 剑指offer(38)二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目分析 树的深度=左子树的深度和右子树深度中最大者+1 代码 fu ...
随机推荐
- Maven依赖传递
依赖传递原则: 1.路径最短原则 2.路径相同是先申明者优先(dependency申明顺序先的优先)
- go中interface作为参数和switch里的type
package main import ( "fmt" "time" ) func main() { i :=2 fmt.Println("Write ...
- 使用PyMySQL连接MySQL错误
使用PyMySQL连接MySQL错误 之前写了一个小项目,今天突然想起来,准备优化一下,但是原本好好的项目竟然跑不起来了 emmm....我真的啥都没干呀 具体错误是这样的: Traceback (m ...
- AngularJS开发中常用的写法,如:获取URL参数、路由跳转、$http、获取元素等
控制器,带状态 app.controller('editCtrl', ['$http', '$location', '$rootScope', '$scope', '$state', '$stateP ...
- MyBatis——特殊传参问题小结
近期在写系统报表API的时候遇到MyBatis中的一些特殊写法: 1. 传入两个参数(一般情况下我们更多的是传入一个对象或者map) public List<MarketVehicleModel ...
- java+上传大文件
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- Linux 常用高效操作
空行处理 linux系统下删除空行,用vim底行模式'%s/^n$//g' 可以删除空行并真正修改文件,但文件数量太大时耗时不可预估,于是操作文件删除空行并重定向到一个新的文件是不错的选择. 常用特殊 ...
- postman使用当前时间戳
//设置当前时间戳postman.setGlobalVariable(“time”,Math.round(new Date().getTime()));time = postman.getGlobal ...
- 为Django添加图片验证码
可直接复制到Django项目中使用 # author:sunshine from django.http import HttpResponse from PIL import Image, Imag ...
- SparkMLLib的简单学习
一. 简介 1. 机器学习中,可以将数据划分为连续数据和离散数据 a. 连续数据:可以取任何值,如房价 b. 离散数据:仅有少量特殊值,如一个房屋有2个或3个房间,但不能为2.75个房间 二. 创建向 ...