代码随想录算法训练营第十六天|104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度

思路:这道题最开始的时候,我想的是用前序遍历的思路来做,整个过程有剪枝的过程,弄了半天没写出来,主要是剪枝没写对!最大深度是叶子节点的高度,可以使用后序遍历来做。

class Solution {
public:int getdepth(TreeNode* node){if(node==nullptr)return 0;int leftdepth=getdepth(node->left);int rightdepth=getdepth(node->right);return 1+max(leftdepth,rightdepth);}int maxDepth(TreeNode* root) {return getdepth(root);}
};

手动模拟一下这个递归过程:对递归理解更加透彻!
在这里插入图片描述
在这里插入图片描述
从这个思路可以看出,从根节点开始,分为左,右两个子树,每次遍历完两个子树,返回两个子树其中深度更深的,再进行加1,这里为什么要加1呢,因为在leetcode中,其将深度定义为从根节点到某个节点经历过的节点数,故比起某些定义为根节点到某个节点经历过的边数要多加1。
前序遍历:

class Solution {
public:int result=0;void getdepth(TreeNode* node,int depth){result=result>depth?result:depth;if(node->left==nullptr&&node->right==nullptr){return;}if(node->left){depth++;getdepth(node->left,depth);depth--;}if(node->right){depth++;getdepth(node->right,depth);depth--;}}int maxDepth(TreeNode* root) {if(root==nullptr)return 0;getdepth(root,1);return result;}
};

111.二叉树的最小深度
递归法:

思路:注意要单独处理一个节点左子节点为空,而右子节点不为空,和一个节点左子节点不为空,而右子节点不为空的情况。因为你是返回的leftdepthrightdepth的最小值,如果不处理,那必定受到影响。

class Solution {
public:int getdepth(TreeNode* node){if(node==nullptr)return 0;int leftdepth=getdepth(node->left);int rightdepth=getdepth(node->right);if(node->left==nullptr&&node->right!=nullptr){return 1+rightdepth;}if(node->left!=nullptr&&node->right==nullptr){return 1+leftdepth;}return 1+min(leftdepth,rightdepth);}int minDepth(TreeNode* root) {return getdepth(root);}
};
class Solution {
public:int result=INT_MAX;void getdepth(TreeNode* node,int depth){if(node->left==nullptr&&node->right==nullptr){result=result>depth?depth:result;return;}if(node->left){depth++;getdepth(node->left,depth);depth--;}if(node->right){depth++;getdepth(node->right,depth);depth--;}}int minDepth(TreeNode* root) {if(root==nullptr)return 0;getdepth(root,1);return result;}
};

222.完全二叉树的节点个数

class Solution {
public:int result=0;void getnodes(TreeNode* root){result++;if(root->left==nullptr&&root->right==nullptr){return;}if(root->left){getnodes(root->left);}if(root->right){getnodes(root->right);}}int countNodes(TreeNode* root) {if(root==nullptr)return 0;getnodes(root);return result;}
};
class Solution {
public:int getnode(TreeNode* node){if(node==nullptr)return 0;int leftnumber=getnode(node->left);int rightnumber=getnode(node->right);return 1+leftnumber+rightnumber;}int countNodes(TreeNode* root) {return getnode(root);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table 动态渲染多级表头;一级表头根据数据动态生成,二级表头固定

一、表格需求: 实现一个动态表头,一级表头,根据数据动态生成,二级表头固定,每列的数据不一样,难点在于数据的处理。做这种表头需要两组数据,一组数据是实现表头的,另一组数据是内容…

Web网页生成桌面应用

前言:网页生成桌面指的是将一个网页保存为桌面应用程序的形式,使得用户可以在桌面上直接打开该网页,而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素,能够提供更加方便快捷的使用体验。 实现…

【pytorch】pytorch学习笔记(续1)

p22:1.加减乘除: (1)add(a,b):等同于ab。 (2)sub(a,b):等同于a-b。 (3)mul(a,b):等同于a*b。 (4)div(a,b)&#xff1a…

Go 接口

接口概览 接口大概理解 接口类型是队其他类型行为的概括与抽象 接口类型中,包含函数声明,但没有数据变量接口的作用通过使用接口,可以写出更加灵活和通用的函数,这些函数不用绑定在一个特定的类型实现上Go 接口特征 很多面向对象…

验厂的类型的流程

【验厂的类型的流程】 在全球贸易一体化的进程中,验厂已经成为出口外贸企业真正与世界接轨的一道门槛,并且通过近几年的不断发展,验厂也逐渐为企业所熟知和充分重视。 如何正确理解验厂标准,实施有效的方案,满足验厂的…

PID控制算法,带C语言源码实现

1 PID简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID算法是连续系统中技术最为成熟、应用最为…

面向对象和面向过程:C语言中的两种编程范式

C语言是一种结构化的编程语言,它支持两种不同的编程范式:面向对象和面向过程。编程范式是一种编程思想或风格,它决定了程序的组织和设计方式。本文将探讨面向对象和面向过程在C语言中的定义、特点、优缺点以及应用场景,并给出一些…

gitlab runner 安装、注册、配置、使用(Docker部署)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

SQL 系列教程(一)

目录 SQL 简介 SQL 是什么 SQL 能做什么 SQL 语法 数据库表 SQL 语句 注意事项 SQL 语句后面的分号 一些最重要的 SQL 命令 SQL SELECT 语句 SQL SELECT 语句 演示数据库 SELECT Column 实例 SELECT * 实例 SQL SELECT DISTINCT 语句 SQL SELECT DISTINCT 语句…

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一,问题现象 everything搜索时,只能搜索到文件夹,无法搜索到文件夹下的文件。 二,问题原因 everything搜索设置问题,设置为"文件夹"导致 三,解决方法 将搜索选项设置为“所有”即可&#x…

5 新增课程

5.1 需求分析 5.1.1 业务流程 根据前边对内容管理模块的数据模型分析,课程相关的信息有:课程基本信息、课程营销信息、课程图片信息、课程计划、课程师资信息,所以新增一门课程需要完成这几部分信息的填写。 以下是业务流程: …

全链路压测:提升业务可靠性和可用性

全链路压测是一种全面评估系统性能和稳定性的测试方法,通过模拟真实用户场景和流程来验证整个应用系统在高负载情况下的表现。全链路压测的主要作用涵盖了多个方面: 性能评估与优化: 全链路压测可以全面评估系统在高负载下的性能表现&#xf…

代码评审——随机数Random问题

问题描述: 为了获取唯一值,经常会依赖产生随机数来保证唯一性。在获取随机数时,如果使用错误的方法,会比较低效。 可以参考以下代码: public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

day31_CSS

今日内容 CSS概述引入方式 (where)选择器(how)属性(how) 1 CSS介绍 层叠样式表(cascading style sheet) CSS 用来美化HTML页面,可以让页面更好看,还可以布局页面. 好处 美化页面,布局页面使用外部css文件,可以实现样式文件和html文件分离,便于维护使用外…

再学jQuery

添加链接描述 jQuery源码采用模块化的设计,将不同功能的代码模块化,并通过jQuery.fn扩展原型链,使得可以灵活地使用各种功能和方法。这样的设计使得代码结构清晰,易于维护和扩展。jQuery源码中考虑了跨浏览器兼容性,通…

苹果眼镜(Vision Pro)的开发者指南(1)

一、用到的底层核心框架: SwiftUI:无论开发者是要创建窗口、体积还是空间体验,SwiftUI 都是构建新的 visionOS 应用程序或将现有 iPadOS 或 iOS 应用程序引入平台的最佳方式。凭借全新的 3D 功能以及对深度、手势、效果和沉浸式场景类型的支持,SwiftUI 可以帮助你为 Vision…

5.ROC-AUC机器学习模型性能的常用的评估指标

最近回顾机器学习基础知识部分的时候,看到了用于评估机器学习模型性能的ROC曲线。再次记录一下,想起之前学习的时候的茫然,希望这次可以更加清晰的了解这一指标。上课的时候听老师提起过,当时没有认真去看,所以这次可以…

SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成

本文首发于公众号:机器感知 SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成; CCA: Collaborative Competitive Agents for Image Editing This paper presents a novel generative model, Collaborative Competitive…

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一,分流 1.实现分流 2.使用侧输出流 二,合流 1,联合 2,连接 三,基于时间的合流——双流联结 1,窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2,间隔联结 2.1 间隔联…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团(证券代码:0022…