Leetcode二叉树最大深度
二叉树的最大深度,即为二叉树的层数,开始的想法是遍历左子树和遍历右子树,返回记录的最大值。这样明显是有漏洞的,如果最右的右子树有左孩子或者左子树有右孩子,结果就是不正确的。
使用递归的方法,整树的最大深度为左孩子树的最大深度或者右孩子树的最大深度。递归结束的条件是,当一个结点的左右子树都为空时,返回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二叉树最大深度相关推荐
- leetcode 662.二叉树最大深度 Java
二叉树最大深度 题目链接 描述 示例 初始代码模板 模板 题目链接 https://leetcode-cn.com/problems/maximum-width-of-binary-tree/ 描述 ...
- 二叉树最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 二叉树最大深度 题目 点击跳转:LeetCode 此题如果从上向下前序遍历进行判断复杂度过高,因为每次判断一个结点都会涉及到很多 ...
- 八十一、Python | Leetcode 二叉树系列(下篇)
@Author:Runsen @Date:2020/7/6 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 二叉树题目---3 另一个树的子树 AND 二叉树最大深度
另一个树的子树 思路 两个数都遍历一遍,找到一个根结点相同时,判断以这个根结点为首的二叉树是否相等 前序遍历 判断两棵树是否相同 对于返回值的处理是难点 bool isSameTree(struct ...
- Leetcode: 二叉树的后序遍历
Leetcode: 二叉树的后序遍历 后遍历的流程:一直往下走,把路口记下来,假如路口有馒头,我们是不吃的,因为要先吃最后的,中间的岔路如果有岔路,就把右边的岔路记下来,但是因为右边没有走过,所以访问 ...
- 用数组建立二叉树(LeetCode二叉树测试)
我在做leetcode上的二叉树题目,经常会报错,但是又不知道错在哪里,于是我想到在vscode上调试我写的代码,于是我参考了leetcode 二叉树的建立.释放内存.层序遍历输出,C++ 做了简化, ...
- LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...
- 二叉树最大深度(LeetCode 104)
力扣 求二叉树的最大深度 目录 思路 1.递归 2.层次遍历 思路 1.递归 求根节点的左子树和右子树的最大值 1. root为空, 返回0 2. root不为空并且左右子树不为空, 返回1 3. ...
- 二叉树最大深度 leetcode
这个题目开始要想是用递归,但是递归的形式,没有想对.直接判断left right 比较麻烦,不如在递归调用的时候判断root是否为空. public class Solution {public in ...
最新文章
- Java成员变量与成员方法
- quartz关闭DBUG日志
- 内存按字节编址,地址从A4000H到CBFFFH,共有多少个字节呢?
- php留言板源码免mysql_PHPMYSQL留言板源码(终极完整版).doc
- 连这几个源码都没啃透,那面试高级开发的事等等再来!
- 20159208 《网络攻防实践》第七周学习总结
- leetcode算法题--环形链表
- 逆序对(树状数组解决)
- C语言变参函数的实现,C语言的那些小秘密之变参函数的实现
- 两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格
- 《深度学习的数学》二刷总结
- 好好学python·基本数据类型
- SpringBoot 2.x ShardingSphere分库分表实战
- 使用Visual Studio.Net,系统报告“automation服务器不能创建对象”错误。解决之道运行:regsvr32 scrrun.dll 就可以了。
- oracle的jdbc语句,Java Oracle jdbc SELECT语句
- html中使用js、jQuery展示页面小结
- 雾里看花之 Python Asyncio
- 语法的集合?协议可没那么简单
- linux下游戏手柄测试程序
- sklearn逻辑回归参数详解,及用逻辑回归制作评分卡
热门文章
- PageOffice并发控制
- 入职总结以及大学生活回顾反省
- 新能源汽车分类销量、逐月数据和进出口数据(2014-2021)
- work around sth
- 【汇正财经】北上资金继续扫货
- rust放置木箱转向_[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]...
- OpenLand邮票的华丽变身 集邮NFT上链之路
- HDU 2389 Rain on your Parade (二分图匹配)
- 美国某公立高校薪资情况
- 学生信息管理系统 Android studio (直接可用)