剑指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 ...
随机推荐
- redis之redis-cluster配置
为什么要用redis-cluster 并发问题 redis官方生成可以达到 10万/每秒,每秒执行10万条命令 假如业务需要每秒100万的命令执行呢? 数据量太大 一台服务器内存正常是16~256G, ...
- sql语句查询出的某字段内容截取
select LEFT(context,LENGTH(context)-1) context from table; (效果: 1,2,3, 查询出: 1,2,3 )
- 安装openssh-server
以前在服务器上装过openssh-server,今天突然想把台式机也打开ssh服务,结果忘了咋弄,稍微百度了一下就弄好了,备忘一下,以后就不用各种百度了. 第一步,安装openssh-server( ...
- 【java】Java.math.BigDecimal.subtract()方法实例
java.math.BigDecimal.subtract(BigDecimal subtrahend) 返回一个BigDecimal,其值为 (this - subtrahend), 精度为 max ...
- MD5介绍
md5介绍 1. md5简介 md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节,1字节 ...
- sql注入笔记-mysql
整理下sql相关知识,查漏补缺(长期更新) 1 常用语句及知识 information_schema包含了大量有用的信息,例如下图 mysql.user下有所有的用户信息,其中authenticati ...
- JS合并多个数组去重算法
var arr1 = ['a','b']; var arr2 = ['a','c','d']; var arr3 = [1,'d',undefined,true,null]; //合并两个数组,去重 ...
- ios TCP抓包
1.工具安装 Mac15.1 ,Xcode11.2.1 这一步有个小坑,我第一次执行rvictls -s 提示 rvictl: command not found.Stack Overflow上提供了 ...
- WIN7+QT5.2.0 连接oracle11g问题及解决方法
用下面的代码建立连接之后,出现了几个问题 //连接数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QOCI"); /**连接Ora ...
- jmeter-移动端接口测试中遇到的问题,http与https
解决:将请求默认值的http改成https