剑指offer【08】- 二叉树的深度(java)
题目:二叉树的深度
考点:知识迁移能力
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
牛客网上的剑指offer题,我按从简单到难的排序来做了
思路:从根节点出发, 查询左子树的深度 , 获取右子树的深度,比较一下,取大的,再加一 。就是整个二叉树的深度
法一:递归
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public int TreeDepth(TreeNode root) { //递归的出口,如果节点没有值,则返回0 if(root == null){ return 0; } //获取左子树的最大深度 int leftDep = TreeDepth(root.left); //获取右子树的最大深度 int rigthDep = TreeDepth(root.right); //找出最大值,并且加上root这一层即可 return Math.max(leftDep,rigthDep)+1; } }
法二:非递归法,层次遍历法
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.Queue; import java.util.LinkedList; public class Solution { public int TreeDepth(TreeNode root) { if(root == null){ return 0; } int count = 0, depth = 0, nextCount = 1; Queue<TreeNode> queue = new LinkedList<TreeNode>(); //将根节点添加到队列中 queue.add(root); //第一次循环时队列的长度为1 while(queue.size()!=0){ count++; //先进先出,取出队列的第一个元素 TreeNode top = queue.poll(); //如果根节点的左子树不为空,则将左子树的根节点添加到队列中 if(top.left!=null){ queue.add(top.left); } //如果根节点的右子树不为空,则将右子树的根节点添加到队列中 if(top.right!=null){ queue.add(top.right); } //当同一层的节点全部添加到队列中时,count与nextCount相等,deph+1 if(count==nextCount){ nextCount = queue.size(); depth++; count=0; } } return depth; } }
分类:
[09] 剑指offer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现