二叉树的最大深度,即为二叉树的层数,开始的想法是遍历左子树和遍历右子树,返回记录的最大值。这样明显是有漏洞的,如果最右的右子树有左孩子或者左子树有右孩子,结果就是不正确的。
  使用递归的方法,整树的最大深度为左孩子树的最大深度或者右孩子树的最大深度。递归结束的条件是,当一个结点的左右子树都为空时,返回1结束。核心思想是DFS深度优先遍历算法。

文章目录

#include
using namespace std;
class Solution {
public:
int maxDepth(TreeNode* root) {

                if(!root)return 0;if(root->left==NULL && root->right==NULL)return 1;int ans=1; //第一层根结点ans+=max(maxDepth(root->left),maxDepth(root->right));return ans;}};

更加简洁的代码:

文章目录

#include
using namespace std;
class Solution {
public:
int maxDepth(TreeNode* root) {

                if(!root)return 0;int l=maxDepth(root->left)+1;int r=maxDepth(root->right)+1;return l>r?l:r;}};

  深度优先搜索迭代方法,二叉树的中序遍历,始终寻找左子树,到头后在寻找右子树。使用栈,优先遍历左子树,遍历当NULL时,右拐遍历右子树,记录右拐时的结点信息。

文章目录

#include
#include
using namespace std;
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
int deep(0),maxdepth(0);
TreeNode* p=root;
stack<pair<TreeNode*,int>>s;

            while(!s.empty() || p!=NULL) //只要栈不为空 就说明还有结点的右子树没有遍历 若p非空 则说明还有结点的左子树没有遍历{while(p) //优先向左遍历{s.push(pair<TreeNode*,int>(p,++deep));p=p->left;//优先向左遍历}p=s.top().first;//若左边遍历到头,准备右拐。右拐之前,记录右拐点的基本信息deep=s.top().second;maxdepth=max(deep,maxdepth);s.pop();p=p->right;}return maxdepth;}};

  广度优先遍历,实际实现就是二叉树的层序遍历。使用队列。每一次循队列中的元素是每一层的所有元素,内层for循环即判断某一层所有结点有没有左右子树,如果有则尾插入队列。for循环的结束条件是某一层结点的个数,不能在for循环中图简单直接写i<=q.size(),因为在for循环语句中,有元素出队列,所以q.size()时刻变化。此处i的含义是每一层的结点个数,无所谓下标,所以从1开始好理解。

文章目录

#include
#include
using namespace std;
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
int deep(0);
deque<TreeNode*> q;
q.push_back(root);
while(!q.empty())
{
++deep;
for(int i=1;i<q.size();i++)
{
TreeNode* p=q.front();
q.pop_front();
if(p->left) q.push_back(p->left);
if(p->right) q.push_back(p->right);
}
}
return deep;
}
};

Leetcode二叉树最大深度相关推荐

  1. leetcode 662.二叉树最大深度 Java

    二叉树最大深度 题目链接 描述 示例 初始代码模板 模板 题目链接 https://leetcode-cn.com/problems/maximum-width-of-binary-tree/ 描述 ...

  2. 二叉树最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

    前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 二叉树最大深度 题目 点击跳转:LeetCode 此题如果从上向下前序遍历进行判断复杂度过高,因为每次判断一个结点都会涉及到很多 ...

  3. 八十一、Python | Leetcode 二叉树系列(下篇)

    @Author:Runsen @Date:2020/7/6 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  4. 二叉树题目---3 另一个树的子树 AND 二叉树最大深度

    另一个树的子树 思路 两个数都遍历一遍,找到一个根结点相同时,判断以这个根结点为首的二叉树是否相等 前序遍历 判断两棵树是否相同 对于返回值的处理是难点 bool isSameTree(struct ...

  5. Leetcode: 二叉树的后序遍历

    Leetcode: 二叉树的后序遍历 后遍历的流程:一直往下走,把路口记下来,假如路口有馒头,我们是不吃的,因为要先吃最后的,中间的岔路如果有岔路,就把右边的岔路记下来,但是因为右边没有走过,所以访问 ...

  6. 用数组建立二叉树(LeetCode二叉树测试)

    我在做leetcode上的二叉树题目,经常会报错,但是又不知道错在哪里,于是我想到在vscode上调试我写的代码,于是我参考了leetcode 二叉树的建立.释放内存.层序遍历输出,C++ 做了简化, ...

  7. LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)

    目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...

  8. 二叉树最大深度(LeetCode 104)

    力扣 求二叉树的最大深度 目录 思路 1.递归 2.层次遍历 思路 1.递归 求根节点的左子树和右子树的最大值 1. root为空, 返回0 2. root不为空并且左右子树不为空,   返回1 3. ...

  9. 二叉树最大深度 leetcode

    这个题目开始要想是用递归,但是递归的形式,没有想对.直接判断left right 比较麻烦,不如在递归调用的时候判断root是否为空. public class Solution {public in ...

最新文章

  1. Java成员变量与成员方法
  2. quartz关闭DBUG日志
  3. 内存按字节编址,地址从A4000H到CBFFFH,共有多少个字节呢?
  4. php留言板源码免mysql_PHPMYSQL留言板源码(终极完整版).doc
  5. 连这几个源码都没啃透,那面试高级开发的事等等再来!
  6. 20159208 《网络攻防实践》第七周学习总结
  7. leetcode算法题--环形链表
  8. 逆序对(树状数组解决)
  9. C语言变参函数的实现,C语言的那些小秘密之变参函数的实现
  10. 两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格
  11. 《深度学习的数学》二刷总结
  12. 好好学python·基本数据类型
  13. SpringBoot 2.x ShardingSphere分库分表实战
  14. 使用Visual Studio.Net,系统报告“automation服务器不能创建对象”错误。解决之道运行:regsvr32 scrrun.dll 就可以了。
  15. oracle的jdbc语句,Java Oracle jdbc SELECT语句
  16. html中使用js、jQuery展示页面小结
  17. 雾里看花之 Python Asyncio
  18. 语法的集合?协议可没那么简单
  19. linux下游戏手柄测试程序
  20. sklearn逻辑回归参数详解,及用逻辑回归制作评分卡

热门文章

  1. PageOffice并发控制
  2. 入职总结以及大学生活回顾反省
  3. 新能源汽车分类销量、逐月数据和进出口数据(2014-2021)
  4. work around sth
  5. 【汇正财经】北上资金继续扫货
  6. rust放置木箱转向_[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]...
  7. OpenLand邮票的华丽变身 集邮NFT上链之路
  8. HDU 2389 Rain on your Parade (二分图匹配)
  9. 美国某公立高校薪资情况
  10. 学生信息管理系统 Android studio (直接可用)