当前位置: 首页 > article >正文

算法训练营day16(二叉树03:最大深度,最小深度,完全二叉树节点数量)

第六章  二叉树part03
 
今日内容: 
 
● 104.二叉树的最大深度  559.n叉树的最大深度
● 111.二叉树的最小深度
● 222.完全二叉树的节点个数
 
迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。
 
 详细布置 
 
 104.二叉树的最大深度 (优先掌握递归)
 
什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。
 
大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。
 
题目链接/文章讲解/视频讲解: 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  
 
 111.二叉树的最小深度 (优先掌握递归)
 
先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。
 
题目链接/文章讲解/视频讲解: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 
 
 
 222.完全二叉树的节点个数(优先掌握递归)
 
需要了解,普通二叉树 怎么求,完全二叉树又怎么求
 
题目链接/文章讲解/视频讲解: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  
 
往日任务
● day 1 任务以及具体安排:https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY  
● day 2 任务以及具体安排:https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG  
● day 3 任务以及具体安排:https://docs.qq.com/doc/DUGdqYWNYeGhlaVR6 
● day 4 任务以及具体安排:https://docs.qq.com/doc/DUFNjYUxYRHRVWklp 
● day 5 周日休息
● day 6 任务以及具体安排:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4 
● day 7 任务以及具体安排:https://docs.qq.com/doc/DUElCb1NyTVpXa0Jj 
● day 8 任务以及具体安排:https://docs.qq.com/doc/DUGdsY2JFaFhDRVZH 
● day 9 任务以及具体安排:https://docs.qq.com/doc/DUHVXSnZNaXpVUHN4 
● day 10 任务以及具体安排:https://docs.qq.com/doc/DUElqeHh3cndDbW1Q 
●day 11 任务以及具体安排:https://docs.qq.com/doc/DUHh6UE5hUUZOZUd0 
●day 12 周日休息 
●day 13 任务以及具体安排:https://docs.qq.com/doc/DUHNpa3F4b2dMUWJ3 
●day 14 任务以及具体安排:https://docs.qq.com/doc/DUHRtdXZZSWFkeGdE 
●day 15 任务以及具体安排:https://docs.qq.com/doc/DUHN0ZVJuRmVYeWNv

day16

二叉树的最大深度

递归法

 class Solution {
     public int maxDepth(TreeNode root) {
         if(root == null) return 0;
         return 1 + Math.max( maxDepth(root.left), maxDepth(root.right));
       //后序遍历
     }
 }

二叉树的最小深度

递归法

 class Solution {
     public int minDepth(TreeNode root) {
         //后序遍历
         if( root == null ) return 0;
         if( root.left == null && root.right != null)
             return minDepth( root.right) + 1;
         if( root.left != null && root.right == null)
             return minDepth( root.left) + 1;
         return Math.min( minDepth(root.left), minDepth( root.right) ) + 1;
     }
 }

完全二叉树的节点数量

递归法

 //普通二叉树节点的数量,后序遍历
 class Solution {
     public int countNodes(TreeNode root) {    
         if( root == null) return 0;
         return 1 + countNodes(root.left) + countNodes(root.right);
     }
 }
 //完全二叉树的节点数量,后序遍历
 //用到完全二叉树的特性,如果两侧的深度相同,那么中间节点一定是满的,这样就不用遍历所有的节点了
 class Solution {
     public int countNodes(TreeNode root) {
        if (root == null) return 0;
         TreeNode left = root.left;
         TreeNode right = root.right;
         int leftDepth = 0, rightDepth = 0; 
         while (left != null) {  // 求左子树深度
             left = left.left;
             leftDepth++;
         }
         while (right != null) { // 求右子树深度
             right = right.right;
             rightDepth++;
         }
         if (leftDepth == rightDepth) {
             return (2 << leftDepth) - 1; // (2<<1) 相当于2^2,leftDepth初始为0没问题
         }
         return countNodes(root.left) + countNodes(root.right) + 1;
         //return  countNodes(left) + countNodes(right) + 1;
         //left 后面在while里发生了变化,不能直接用
     }
 }

小节:前序求深度,后序求高度(关键在于是把子节点处理完了返回给父节点,还是处理父节点传递给子节点)

感谢大佬分享:

代码随想录-算法训练营day16【二叉树03:二叉树的最大深度、二叉树的最小深度、完全二叉树的节点个数】-CSDN博客


http://www.kler.cn/a/413869.html

相关文章:

  • vue3实现自定义导航菜单
  • Linux入门攻坚——39、Nginx入门
  • Java中的线程池使用详解
  • linux模拟HID USB设备及wireshark USB抓包配置
  • OpenAI Whisper 语音识别 模型部署及接口封装
  • Uniapp 安装安卓、IOS模拟器并调试
  • 湖北移动,以5G-A规模商用“换”出内需新活力
  • SSH远程命令实践:如何打包、压缩并传输服务器文件
  • shell-函数调用进阶即重定向
  • 租辆酷车小程序开发(二)—— 接入微服务GRPC
  • PHP获取安卓APK文件的信息(名称、版本、图标文件等)
  • 科技“加码”编织智能防护网,中威电子助力智慧林业建设
  • 构建与计算:使用递归实现表达式的二叉树解析器
  • [NeurIPS 2022] Leveraging Inter-Layer Dependency for Post-Training Quantization
  • ffmpeg 增亮 docker 使用
  • springboot/ssm餐厅点餐管理系统Java在线点餐美食论坛系统web美食源码
  • uniapp echarts tooltip formation 不识别html
  • 【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析
  • docker arm/amd双架构镜像制作
  • 【JavaEE】多线程(3)
  • ComfyUI节点安装笔记
  • Python 中的 lambda 函数介绍
  • element ui select绑定的值是对象的属性时,显示异常.
  • 无人机:智能飞行控制系统技术与算法
  • python的数据统计与处理
  • 【JS】React与Vue的异步编程对比:深度解析与实战案例全面指南