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

二叉树理论基础:

https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

104.二叉树的最大深度

题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/

思路:(递归法)

本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。

二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
而根节点的高度就是二叉树的最大深度,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。

这一点其实是很多同学没有想清楚的,很多题解同样没有讲清楚。

我先用后序遍历(左右中)来计算树的高度。

确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。

class solution {
public:int getdepth(TreeNode* node) {if (node == NULL) return 0;int leftdepth = getdepth(node->left);       // 左int rightdepth = getdepth(node->right);     // 右int depth = 1 + max(leftdepth, rightdepth); // 中return depth;}int maxDepth(TreeNode* root) {return getdepth(root);}
};

226.翻转二叉树

题目连接:https://leetcode.cn/problems/invert-binary-tree/

思路:

本题有一个误区,在处理节点的过程中,最大深度很容易理解,最小深度就不那么好理解。
题目中说的是:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。
什么是叶子节点,左右孩子都为空的节点才是叶子节点
在这里插入图片描述
int result = 1 + min(leftDepth, rightDepth);
这个代码就犯了此图中的误区:
如果这么求的话,没有左孩子的分支会算为最短深度。

所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。

反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。

遍历的顺序为后序(左右中),可以看出:求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑

class Solution {public int minDepth(TreeNode root) {return getDepth(root);}public int getDepth(TreeNode node) {if(node == null)return 0;int leftDepth = getDepth(node.left);int rightDepth = getDepth(node.right);// 特殊判断// 如果左子树为空,右子树不为空if(node.left==null && node.right!=null)return 1 + rightDepth;// 如果左子树不为空,右子树为空if(node.left!=null && node.right==null)return 1 + leftDepth;return 1+Math.min(leftDepth,rightDepth);}
}

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

思路:

首先按照普通二叉树的逻辑来求。

这道题目的递归法和求二叉树的深度写法类似,先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。

class Solution {public int countNodes(TreeNode root) {return getTreeNodes(root);}private int getTreeNodes(TreeNode node){if(node==null)return 0;return 1+getTreeNodes(node.left)+getTreeNodes(node.right);}
}

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

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

相关文章

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

如何使用Docker部署导航页工具Dashy并实现任意浏览器远程访问——“cpolar内网穿透”

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

最大流解决二分图匹配问题

文章目录 零、前言一、二分图匹配转化为网络流模型1.1建模步骤1.2整数值最大流和二分图匹配的关系1.3代码实现 二、OJ练习P2756 飞行员配对方案问题P3254 圆桌问题 零、前言 阅读本文前,需具备以下知识: 二分图及染色法判定-CSDN博客 二分图最大匹配—…

【JavaSE】P114~P147 ArrayList集合,Scanner类,Random,字符串及相关常用方法,静态static

目录 1 ArrayList 集合装箱,拆箱及包装类 2 API 概述和使用Scanner类匿名对象Random生成随机数 3 字符串字符串的31种构造方法字符串的常量池equals和 字符串的获取相关方法字符串的截取方法字符串的转换相关方法字符串的分割方法 4 静态static关键字静态static的内…

对话泛能网程路:能源产业互联网,行至中程

泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外,也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”,包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产,都在构成着碳交易市场的未来底层。 这恰是产业互联…

PCL-IO输入输入模块

IO输入输入模块 一、概述二、点云数据格式1. PCD 格式2. PLY 格式3. OBJ 格式4. STL 格式5. OFF 格式 三、读取3D文件1. API 总览2. 示例 四、保存3D文件1. API 总览2. 示例 一、概述 PCL 库提供了一个模块用来对3D数据进行读写操作,这个库提供了一个模块&#xff…

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度)

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度) 1、时间:2007-2022年(季度、年度) 2、指标: 季度指标:时间、GDP不变价累计值(亿元…

性能优化-高通的Hexagon DSP和NPU

原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU,这些为处理简单大量运算而设计的硬件。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能&#xf…

多臂老虎机理论系列

[多臂老虎机理论](Lower bounds for non-adaptive exploration) 多臂老虎机之Lower bounds 定理 2.12: 定理的意义在于,对于任何不调整探索策略的算法,存在至少一个问题实例,使得随着时间的推移,该算法的预期遗憾将…

Linux常见的管理命令

1. whoami 作用: 显示出当前有效的用户名称,Linux是多用户多任务 语法:whoami(选项) 选项: --help:在线帮助 --version:显示版本信息和退出 场景使用: 1. 当用户想要查看当前登录系统的用户…

14.case条件测试语句(5)

case语句是在多个范围内匹 配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内, 则会去执行星号(*)中所定义的默认命令(C语言中的default语句) 提示用户输入一个字…

爬取樱花动漫名侦探柯南最新剧场版ts格式

import os import requests import zipfile from tqdm import tqdm import tkinter as tkfilename 名侦探柯南\\ if not os.path.exists(filename):os.mkdir(filename) # https://vip.ffzy-online6.com/20231129/22304_740e70d0/2000k/hls/cedd2dc1ecb000001.ts # https://vip…

硬件基础:存储器

之前对存储器做过简单的汇总,参考这篇文章: 计算机/微机存储技术_路溪非溪的博客-CSDN博客 这次,我们从数字集成电路的角度再次补充学习一下存储器的知识。 定义和分类 从这里面我们能知道一些关键词。 存储介质主要是半导体器件和磁性材料。…

亿发中小型企业erp软件智能化赋能,专业助力广东制造行业生产流程管理

在当前经济全球化的环境下,广东省的中小型制造业企业正面临多方面的严峻挑战。包括产品质量的维护、分销渠道的稳定、生产成本降低以及减轻生产过程中的资源消耗等难题。目前,随着信息技术的迅速发展,一些先进的IT工具,比如企业资…

STM32实现软件IIC协议操作OLED显示屏(1)

时间记录:2024/1/25 一、IIC协议介绍 (1)协议介绍 IIC(又称I2C,Inter-Integrated Circuit),即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发,用…

OSS上传下载乱码问题

配置headers: "Content-Disposition": attachment; filename*UTF-8${encodeURIComponent(file.file.name)},

【GitHub项目推荐--开源小游戏】【转载】

01 回合制生存游戏 Cataclysm-DDA 是一款回合制生存游戏,背景设置在后世界末日的世界中。虽然有些人将其描述为“僵尸游戏”,但《大灾变》远不止这些。努力在一个严酷、持久、程序生成的世界中生存。 为食物、设备寻找一个死去的文明的残余物。或者&am…

ThinkPHP+uni-app框架熊猫电竞赏金电竞系统源码PHP含APP+H5

熊猫电竞赏金电竞系统源码,包含APP、H5和搭建视频教程,支持运营级搭建,这套源码是基于ThinkPHPUniaapp框架开发的。 赏金电竞系统源码 APPh5搭建视频 可搭建!运营级! 赏金赛源码,用户通过平台打比赛&#x…

小白水平理解面试经典题目LeetCode 594 Longest Harmonious Subsequence(最大和谐字符串)

594 最大和谐字符串 这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums …

用vue实现微信小程序的点餐首页-纯前端效果

一、效果图 图片来源于网络 二、代码 <template><view class"container"><view class"top"><image src"../../static/img/home.png" class"home"></image></view><view class"content&…