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

day19 leetcode-hot100-37(二叉树2)

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

1.深度优先遍历(递归)ps:不好理解,所以我一般不喜欢用递归

思路

典型算法,用递归求出高度,每次都是深度优先。

具体算法
/*** 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;}else{int lefth=maxDepth(root.left);int righth=maxDepth(root.right);return Math.max(lefth,righth)+1;}}
}

2.深度优先遍历(栈)

思路

(1)设置两个栈,分别记录节点与对应节点的高度,因此要求同时进push与出pop

(2)采用前序遍历的方法,先将节点的右节点入栈,然后是左节点入栈,每次进栈高度均加一。然后每次循环都判断当前节点的高度是不是最高的。

具体代码
/*** 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 ans=0;Deque<TreeNode> dq = new LinkedList<>();Deque<Integer> nh = new LinkedList<>();dq.push(root);nh.push(1);while(!dq.isEmpty()){TreeNode currn = dq.pop();int currh=nh.pop();ans=Math.max(ans,currh);if(currn.right!=null){dq.push(currn.right);nh.push(currh+1);}if(currn.left!=null){dq.push(currn.left);nh.push(currh+1);}}return ans;}
}

3.广度优先遍历(队列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;int ans=0;Deque<TreeNode> dq = new LinkedList<>();Deque<Integer> h = new LinkedList<>();dq.offer(root);h.offer(1);while(!dq.isEmpty()){TreeNode n = dq.poll();int curr = h.poll();ans = Math.max(ans,curr);if(n.left!=null){dq.offer(n.left);h.offer(curr+1);}if(n.right!=null){dq.offer(n.right);h.offer(curr+1);}}return ans;}
}

4.广度优先遍历(队列2)

思路

计算二叉树的层数。

(1)每次循环将本层的节点全部抛出(dq.size()),将下一层的节点全部加入。

(2)没删除一层意味着ans+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;int ans=0;Deque<TreeNode> dq = new LinkedList<>();dq.offer(root);while(!dq.isEmpty()){int size = dq.size();while(size>0){TreeNode n = dq.poll();if(n.left!=null){dq.offer(n.left);}if(n.right!=null){dq.offer(n.right);}size--;}ans++;}return ans;}
}

http://www.dtcms.com/a/231848.html

相关文章:

  • dify中解决docx上传文件报错问题
  • NC28 最小覆盖子串【牛客网】
  • 雷卯针对易百纳 海思Hi3519AV100开发板防雷防静电方案
  • Attention Is All You Need:抛弃循环神经网络的时代来了!
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器
  • LangChain开发环境搭建
  • 常用的录音芯片型号有哪些?
  • ‌RF Choke(射频扼流圈)
  • 5.Promise,async,await概念(1)
  • nmcli connection常用命令及设置wifi为AP模式
  • 【Zephyr 系列 7】BLE 数据透传系统设计与实现:双向通信、缓冲区与状态同步全解析
  • MySQL 8.0 窗口函数全面解析与实例
  • 关于项目多语言化任务的概述
  • 【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
  • CppCon 2015 学习:Beyond Sanitizers
  • 2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
  • Mysql的B-树和B+树的区别总结
  • stripe支付测试,ngrok无法使用?免费vscode端口转发,轻松简单!
  • 【输入URL到页面展示】
  • OurBMC技术委员会2025年二季度例会顺利召开
  • Android 项目的核心配置文件
  • 解决fastadmin、uniapp打包上线H5项目路由冲突问题
  • 【Linux】centos软件安装
  • macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库
  • OpenAI API 流式传输
  • 2.0 阅读方法论与知识总结
  • 软件功能鉴定需要注意哪些内容?
  • Windows GDI 对象泄漏排查实战
  • Vue 生命周期全解析:从创建到销毁的完整旅程
  • [网页五子棋][匹配模块]实现胜负判定,处理玩家掉线