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

代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数

104. 二叉树的最大深度 - 力扣(LeetCode)

递归,可以前序遍历,也可以后序遍历

前序遍历是backtracking

下面是后序遍历的代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {if (root == null) return 0;int left = maxDepth(root.left);int right = maxDepth(root.right);return Math.max(left, right) + 1;       }
}

层序遍历,到最后一层, 记录遍历了多少层。需要遍历到最后一层

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);int level = 0;while (!queue.isEmpty()) {int size = queue.size();level++;for (int i = 0; i < size; i++) {TreeNode cur = queue.poll();if (cur.left != null) queue.add(cur.left);if (cur.right != null) queue.add(cur.right);}}return level;}
}

111. 二叉树的最小深度 - 力扣(LeetCode)

递归:当一边是空的时候,返回另外一边

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {if (root == null) return 0;int left = minDepth(root.left);int right = minDepth(root.right);if (root.left == null && root.right != null) {return right + 1;}if (root.right == null && root.left != null) {return left + 1;}return Math.min(left, right) + 1;}
}

迭代:

当当前的node的左右孩子都为null的时候,就可以返回level了

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);int level = 0;while (!queue.isEmpty()) {int size = queue.size();level++;for (int i = 0; i < size; i++) {TreeNode cur = queue.poll();if (cur.left == null && cur.right == null) return level;if (cur.left != null) queue.add(cur.left);if (cur.right != null) queue.add(cur.right);}}return level;}
}

222. 完全二叉树的节点个数 - 力扣(LeetCode)

递归:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;int left = countNodes(root.left);int right = countNodes(root.right);return left + right + 1;}
}

迭代:层序遍历,每取出一个node,count + 1

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);int count = 0;while (!queue.isEmpty()) {int size = queue.size();level++;for (int i = 0; i < size; i++) {TreeNode cur = queue.poll();count++;if (cur.left != null) queue.add(cur.left);if (cur.right != null) queue.add(cur.right);}}return count;}
}

http://www.lryc.cn/news/340019.html

相关文章:

  • Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?
  • 【华为OD机试】执行任务赚积分【C卷|100分】
  • mybatis分页实现总结
  • Vue3——html-doc-js(html导出为word的js库)
  • 第19天:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构
  • 外观模式:简化复杂系统的统一接口
  • PHP数组去重
  • 论软件系统的架构风格,使用三段论 写一篇系统架构师论文
  • 深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流
  • 企业级网络安全:入侵防御实时阻止,守护您的业务安全
  • (一)Java八股——Redis
  • 2024.4.15力扣每日一题——设计哈希映射
  • 数据结构DAY4--哈希表
  • MySQL二阶段和三阶段提交
  • 代码随想录算法训练营第四十二天|01背包问题、416. 分割等和子集
  • JVM主要知识点详解
  • hot100 -- 链表(中)
  • 数据结构面试常见问题
  • 蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)
  • 普通人做抖音小店真的能赚钱吗?可以,但更取决于个人
  • 基于单链表实现通讯管理系统!(有完整源码!)
  • MATLAB入门介绍
  • 【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)
  • Angular 使用DomSanitizer防范跨站脚本攻击
  • (八)PostgreSQL的数据库管理
  • 外包干了30天,技术倒退明显
  • ruoyi-nbcio-plus基于vue3的flowable的自定义业务单表例子的升级修改
  • 【ENSP】华为三层交换机配置AAA认证,开启telnet服务
  • collections模块下的Counter函数讲解
  • HarmonyOS开发实例:【分布式邮件】