首页 > 其他分享 >剑指offer——二叉树的深度

剑指offer——二叉树的深度

时间:2022-11-01 11:08:03浏览次数:64  
标签:right TreeNode offer int pRoot depth 二叉树 深度 left


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

思路1:按照深度优先遍历,设置一个全局变量max_depth用于记录树的最大深度,遍历整棵二叉树的所有节点,到达叶子节点则判断一下是否比max_depth更大,是则更新最大深度

/*
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 0;
DFS(pRoot,0);
return max_depth;
}
void DFS(TreeNode* root,int depth){
if(root==nullptr)
return ;
depth+=1;
if(root->left==nullptr&&root->right==nullptr){
if(depth>max_depth)
max_depth=depth;
return ;
}
DFS(root->left,depth);
DFS(root->right,depth);
}
private:
int max_depth=0;
};

思路2:按照广度优先遍历,每遍历一层,max_depth+1

/*
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 0;
queue<TreeNode*> que;
que.push(pRoot);
while(!que.empty()){
int size=que.size();
max_depth++;
while(size--){
TreeNode *temp=que.front();
que.pop();
if(temp->left)
que.push(temp->left);
if(temp->right)
que.push(temp->right);
}
}
return max_depth;
}
private:
int max_depth=0;
};

思路3:树的高度是左右子树中较大的那个高度+1

/*
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 0;
int depth=getHigh(pRoot);
return depth;
}
int getHigh(TreeNode* pRoot){
if(pRoot==nullptr)
return 0;
int left=getHigh(pRoot->left);
int right=getHigh(pRoot->right);
return max(left,right)+1;
}
};


标签:right,TreeNode,offer,int,pRoot,depth,二叉树,深度,left
From: https://blog.51cto.com/u_15855860/5812296

相关文章

  • LeetCode_617_合并二叉树
    题目描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他......
  • LeetCode_637_二叉树的层平均值
    题目描述:给定一个非空二叉树,返回一个由每层节点平均值组成的数组.示例1:输入:3/\920/\157输出:[3,14.5,11]解释:第0层的平均值是3,第1层......
  • 剑指offer——不用加减乘除做加法
    题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:分三步1)不考虑进位,只是对两个数进行按位异或(二进制异或就是对应位相加)2)统计进......
  • 剑指offer——圆圈中最后剩下的数字
    题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋......
  • 图的深度优先遍历DFS
    //邻接矩阵表示//实现图的深度优先遍历(DFS)constintmaxv=1000;//定义图中最大节点数constintINF=MAX_INT;intn;//输入节点数intG[maxv][maxv]={INF};boolvisited[ma......
  • 剑指offer——求1+2+3+...+n的和
    题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)思路1:使用构造函数,创建n个类对象,利用构造函数进行求和计算clas......
  • 剑指offer——扑克牌中的顺子
    题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如......
  • 深度学习基础课:全连接层的前向和后向传播推导(中)
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得......
  • 深度学习-yolo-多(单)目标检测
    代码是在吴恩达深度学习作业的基础上完成的。问题1:下载的yolo.h5无法使用开始想原来下载的不行我就换个地方下载呗,就绕到gitlfs去了,然后发现这个条路好像不大行得通......
  • 刷题 二叉树
    代码随想录LeetCode110. 平衡二叉树carl递归思路方法一:递归求高度、递归判断是否平衡方法二:递归求高度过程中判断是否平衡细节略LeetCode257. 二叉树的......