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

104.二叉树的最大深度

题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/
文档讲解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1Gd4y1V75u

思路

  • 之前用层序遍历做过最大深度的题。现在换递归的方法。
  • 后序遍历:根节点的高度就是二叉树的最大深度,而高度是从下往上慢慢累加上去的,所以用的是后序遍历(左右中)。
  • 前序遍历:代码会比后序遍历复杂一些。从上往下深度依次增加。用了深度回溯,等我学了回溯再回来补起。

代码

class Solution {public int maxDepth(TreeNode root) {return getMaxHeight(root);}public int getMaxHeight(TreeNode root) {if (root == null) return 0;int leftHeight = getMaxHeight(root.left);int rightHeight = getMaxHeight(root.right);int height = 1 + Math.max(leftHeight, rightHeight);return height;}// getMaxHeight()的精简写法,不定义leftHeight和rightHeight,直接写到return里面。public int getMaxHeight(TreeNode root) {if (root == null) return 0;return 1 + Math.max(getMaxHeight(root.left), getMaxHeight(root.right));}
}

559.n叉树的最大深度

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

思路

和二叉树不一样的是,需要先遍历每一个孩子的下的深度,每次遍历都和最大深度相比较。

class Solution {public int maxDepth(Node root) {return getMaxHeight(root);}public int getMaxHeight(Node root) {if (root == null) return 0;int max = 0;for (Node child : root.children) {int childHeight = getMaxHeight(child);max = Math.max(childHeight, max);}return 1 + max;}
}

111.二叉树的最小深度

题目链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree/
文档讲解:https://programmercarl.com/0111.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E6%B7%B1%E5%BA%A6.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1QD4y1B7e2

思路

  • 这道题同样也可以用层序遍历解出。下面是递归法。
  • 也是用后序遍历来解决。但在求出左右子树的深度之后,不能直接比较选最小值。因为如果根节点左子树为空,右子树深度为2,那这样算出来根节点最小深度就是1 + 0了。在这部分要分情况来选择。

代码

class Solution {public int minDepth(TreeNode root) {return getMaxHeight(root);}public int getMaxHeight(TreeNode root) {if (root == null) return 0;int leftHeight = getMaxHeight(root.left);int rightHeight = getMaxHeight(root.right);// 当左子树为空,就选择右子树的高度。if (root.left == null && root.right != null) return 1 + rightHeight;// 当右子树为空,就选择左子树的高度。else if (root.left != null && root.right == null) return 1 + leftHeight;// 如果两边都不为空,就选最小高度。return 1 + Math.min(leftHeight, rightHeight);}
}

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

题目链接:https://leetcode.cn/problems/count-complete-tree-nodes/
文档讲解:https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%AA%E6%95%B0.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1eW4y1B7pD

思路

  • 如完全二叉树的特点是,除了底层节点,上面的结点都是满的,而底层节点从左到右一次排开,中间不能有剩余。所以虽然这道题可以用二叉树的各种遍历方法解决,但是最好是使用完全二叉树的特性进行解决。
  • 通过遍历左侧和右侧的深度,来判断该子树是否为满二叉树,如果是满二叉树,节点个数就是2n - 1 个。

代码

class Solution {public int countNodes(TreeNode root) {return getCount(root);}public int getCount(TreeNode root) {if (root == null) return 0;// 满二叉树也是一个终止条件TreeNode left = root.left;TreeNode right = root.right;int leftCount = 0, rightCount = 0;while (left != null) {leftCount++;left = left.left;}while (right != null) {rightCount++;right = right.right;}if (leftCount == rightCount) return (2 << leftCount) - 1; return 1 + getCount(root.left) + getCount(root.right);}
}

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

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

相关文章

infoq读书笔记-省钱在于“架构师”!亚马逊CTO 20年架构经 验之道:俭约架构师的七大黄金法则

“俭约架构师”的七大黄金法则 法则一&#xff1a;将成本视为一种非功能性需求:可访问性、可用性、可扩展性、安全性、可移植性、可维护性和合规性等都在此列。而成本往往是其中受到忽略的一条 法则二&#xff1a;确保系统的最终成本与业务保持一致: 在设计和构建系统时&#…

ProxySQL路由策略实现读写分离

目的&#xff1a;配置proxysql路由策略后将不同用户的不同请求路由到不同的节点&#xff0c;实现读写分离 前提条件&#xff1a; 配置表mysql_replication_hostgroups&#xff0c;10为写组&#xff0c;20为读组 mysql_users表中已添加用户writer用户加入10写组&#xff0c;rea…

【QT八股文】系列之篇章3 | QT的多线程以及QThread与QObject

【QT八股文】系列之篇章3 | QT的多线程 前言4. 多线程为什么需要使用线程池线程池的基础知识python中创建线程池的方法使用threading库队列Queue来实现线程池使用threadpool模块&#xff0c;这是个python的第三方模块&#xff0c;支持python2和python3 QThread的定义QT多线程知…

下一代Docker会让部署更丝滑吗

下一代Docker会让部署更丝滑吗 如何通俗易懂的理解DockerDocker有什么缺点Docker与AI结合&#xff0c;会让部署更加丝滑吗 随着互联网技术的不断发展&#xff0c;单机系统已经无法满足日益正常的用户量以及正常处理用户请求&#xff0c;这个时候就需要进行多机部署&#xff0c;…

什么是Spring Bean?

在 Spring 框架中&#xff0c;“Spring Bean”是一个非常核心的概念。简而言之&#xff0c;一个Spring Bean就是Spring IoC容器管理的一个对象。Spring Beans是Spring框架的基本构建块。IoC&#xff0c;即“控制反转”&#xff0c;是一种设计原则&#xff0c;用来将对象的创建和…

k8s-helloword部署一个应用

k8s-helloword部署一个应用 快速部署一个pod命令 部署一个名为 test-nginx Pod 方式一&#xff1a;使用 kubectl run kubectl run test-nginx --imagenginx然后使用 kubectl get pod 查看&#xff0c;kubectl get pod 是查看默认名称空间下的Pod 如果想要跟详细的查看这个…

四元数学习总结(1)

导语&#xff1a;相比矩阵&#xff0c;用四元数处理3D旋转的优势是毋庸置疑的&#xff0c;但由于概念复杂&#xff0c;难于理解&#xff0c;一直令我摸不着头脑。最近学习更是发现在机器人、无人机、SLAM等先进领域&#xff0c;四元数被当成实数、整数这样的基础&#xff0c;所…

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类&#xff0c;需要重写onCreate和onUpgrade两个方法 案例&#xff1a;实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…

FPGA 纯逻辑arinc818 ip core

1、 符合FC-FS、FC-AV、FC-ADVB协议规范&#xff1b; 2、符合ARINC818协议规范&#xff1b; 3、支持光纤通信Class1、Class3服务&#xff1b; 5、可动态配置光纤端口速率&#xff0c;支持1.0625Gbps、2.125Gbps、3.1875Gbps、4.25Gbps可配置&#xff1b; 6、DDR控制接口简洁…

SAP OBYC自动记账 详解

在MM模块的许多操作都能实现在FI模块自动过账,如PO收货、发票验证、工单发料、向生产车间发料等等。不用说,一定需要在IMG中进行配置才可以实现自动处理。但SAP实现的这种自动配置的机制是怎样的呢?其实也并不复杂,让我们先以一种最简单的情况来了解实现原理和实现流程,然…

企业级架构及本体论最新进展

本文主要探讨了企业级架构和本体论的新兴趋势&#xff0c;特别是DoDAF、IDEAS、UAF和NAF的发展历程、理论基础、模型构建以及与ArchiMate和语义网技术的关联。原文: The emerging landscape of Enterprise Architecture and Ontology 导言 动机和采用的方法 关注我的人都知道我…

如何修复 System has not been booted with systemd 报错信息?

如何修复 System has not been booted with systemd 报错信息&#xff1f; 一、问题描述&#xff1a; 我们在学习 linux 系统时&#xff0c;使用 systemd 命令&#xff08;比如 sudo systemctl status ssh&#xff09;&#xff0c;可能会遇到一个报错信息&#xff1a; System…

【图论】最短路(一)

发现之前做的题很乱&#xff0c;用小笔记把看过的博客和题目分类记录一下&#xff0c; 代码参考了很多佬&#xff0c;是标注出来的链接&#xff0c;若不同意我就删掉&#xff08;鞠躬&#xff09; 找了几张好点的&#xff0c;图来源图中的id和acwing 1.dijkstra 依次找到距…

HyperLPR3 车牌识别

Linux 之前安装了python3 apt install python3.8-venv cd /root python3 -m venv HyperLPR3 REM cd HyperLPR3 source HyperLPR3/bin/activate 参考 https://www.jb51.net/article/222885.htm python -m pip install hyperlpr3 里面有fastapi&#xff0c;opencv等 错误&#x…

KubeKey 安装 K8s

官网教程 在 Linux 上以 All-in-One 模式安装 KubeSphere 步骤 1&#xff1a;准备 Linux 机器 若要以 All-in-One 模式进行安装&#xff0c;您仅需参考以下对机器硬件和操作系统的要求准备一台主机。 硬件推荐配置 操作系统最低配置Ubuntu 16.04, 18.04, 20.04, 22.042 核 …

windows服务器安装TortoiseSVN教程

TortoiseSVN也称小乌龟~ 下载链接&#xff1a; https://www.liqucn.com/rj/91608.shtml 下载完成后&#xff0c;先安装TortoiseSVN&#xff0c;安装完成后&#xff0c;根据需要安装中文包 安装比较简单直接下一步即可&#xff0c;注意安装路径根据需要调整到非c盘。 安装中…

Android 高德地图 添加 天地图 卫星瓦片图片 离线缓存

由于天地图的地图接口请求有次数限制&#xff0c;我们做了本地缓存机制 原理是先查找本地目录是否有保存的瓦片图片&#xff0c;有的话直接返回路径&#xff0c;没有的话去请求天地图加载并保存到本地。 话不多说&#xff0c;直接上代码 我们加载在线瓦片代码是下面这样的&a…

超详细的前后端实战项目(Spring系列加上vue3)前端篇+后端篇(三)(一步步实现+源码)

好了&#xff0c;兄弟们&#xff0c;继昨天的项目之后&#xff0c;开始继续敲前端代码&#xff0c;完成前端部分&#xff08;今天应该能把前端大概完成开启后端部分了&#xff09; 昨天补充了一下登录界面加上了文章管理界面和用户个人中心界面 完善用户个人中心界面 修改一…

新手做抖音小店应该注意哪些问题?怎么正确的做抖音小店?

大家好&#xff0c;我是电商花花。 我们想做好一家抖音小店&#xff0c;想长期持久的做好一家抖店&#xff0c;一定要注意下面这些问题&#xff0c;只有避开这些做店的坑&#xff0c;我们才能稳稳的出单&#xff0c;稳稳的赚钱。 做抖音小店不能无脑铺货&#xff0c;要做精细…

【正点原子Linux连载】 第四十七章 音频驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四十…