【树】剑指 Offer 55 - I. 二叉树的深度

2023-05-16

题目

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7]
    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


递归法

树中每一个节点的深度都满足depth = max(左子树深度, 右子树深度)+1,因此可以使用递归的方法求解,递归出口为叶子节点处,返回0。实际上就是后序遍历

class Solution {
	public int maxDepth(TreeNode root) {
		if (root == null) {
			return 0;
		}
		int leftDepth = maxDepth(root.left);
		int rightDepth = maxDepth(root.right);
		return Math.max(leftDepth, rightDepth) + 1;
	}
}

层序遍历法

遍历二叉树的每一层,访问每一层时将计数器加1,这里需要用到两个队列,第一个队列nowLevel用来记录当前层的所有节点,第二个队列nextLevel用来记录下一层的所有节点,每次循环时将nextLevel的所有节点添加到nowLevel中,然后再遍历nowLevel中的每个节点,并将其左右孩子节点添加到nextLevel中,将计数器+1。

这里实际上使用了层序遍历的思想,层序遍历时是将当前节点的孩子节点添加到同一个队列的尾部,此处为了区分上下两层的节点从而方便计数,便将孩子节点添加到nextLevel

class Solution {
	public int maxDepth(TreeNode root) {
		if (root == null)
			return 0;
		Queue<TreeNode> nowLevel = new LinkedList<TreeNode>();
		Queue<TreeNode> nextLevel = new LinkedList<TreeNode>();
		nextLevel.offer(root);
		int level = 0;
		while (!nowLevel.isEmpty() || !nextLevel.isEmpty()) {
			// 将下一层节点全部装入当前层节点中
			while (!nextLevel.isEmpty())
				nowLevel.offer(nextLevel.poll());
			level++;
			// 遍历当前层节点,并将其左右孩子节点装入下一层节点中
			while (!nowLevel.isEmpty()) {
				TreeNode node = nowLevel.poll();
				if (node != null) {
					if (node.left != null)
						nextLevel.offer(node.left);
					if (node.right != null)
						nextLevel.offer(node.right);
				}
			}
		}
		return level;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【树】剑指 Offer 55 - I. 二叉树的深度 的相关文章

  • 剑指offer—03

    剑指 Offer 03 数组中重复的数字 找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0 xff5e n 1 的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字重复了 xff0c 也不知道每个数
  • 通关剑指 Offer——剑指 Offer II 056. 二叉搜索树中两个节点之和

    1 题目描述 剑指 Offer II 056 二叉搜索树中两个节点之和 给定一个二叉搜索树的 根节点 root 和一个整数 k 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 假设二叉搜索树中节点的值均唯一 示例 1 xff1a
  • 剑指 Offer 41. 数据流中的中位数(堆)1

    如何得到一个数据流中的中位数 xff1f 如果从数据流中读出奇数个数值 xff0c 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 xff0c 那么中位数就是所有数值排序之后中间两个数的平均值 例如 xff0c
  • 剑指 Offer 03. 数组中重复的数字--详解

    找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0 xff5e n 1 的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字重复了 xff0c 也不知道每个数字重复了几次 请找出数组中任意一个重复的数
  • Permutation 排列组合,主要是字符串的排列offer上的题目,还有leetcode的组合

    一个简洁版的结果过程说明 xff0c 固定一个位 xff0c 变换其他位 a b c d a b d c a c b d a c d b a d c b a d b c void perm char list int i int n int
  • 【树】剑指 Offer 55 - I. 二叉树的深度

    题目 输入一棵二叉树的根节点 xff0c 求该树的深度 从根节点到叶节点依次经过的节点 xff08 含根 叶节点 xff09 形成树的一条路径 xff0c 最长路径的长度为树的深度 例如 xff1a 给定二叉树 span class tok
  • 【剑指offer】二叉搜索树与双向链表

    双向链表从左到右的顺序很明显就是中序遍历二叉树输出的顺序 xff0c 因此核心思想就是使用中序遍历 xff0c 在遍历过程中调整指针的指向 需要用到两个全局变量 xff08 递归的题目不用吝啬全局变量 xff09 xff0c c u r N
  • 刷完 LeetCode 是什么水平?能拿到什么水平的 offer?

    链接 xff1a https www zhihu com question 32019460 编辑 xff1a 深度学习与计算机视觉 声明 xff1a 仅做学术分享 xff0c 侵删 刷题是我们一贯的学习方式 xff0c 但是学霸和学渣的区
  • 剑指 Offer 59 - II. 队列的最大值

    剑指 Offer 59 II 队列的最大值 请定义一个队列并实现函数 max value 得到队列里的最大值 xff0c 要求函数max value push back 和 pop front 的均摊时间复杂度都是O 1 若队列为空 xff
  • 剑指 Offer 46. 把数字翻译成字符串

    剑指 Offer 46 把数字翻译成字符串 给定一个数字 xff0c 我们按照如下规则把它翻译为字符串 xff1a 0 翻译成 a xff0c 1 翻译成 b xff0c xff0c 11 翻译成 l xff0c xff0c 25 翻译成
  • day7: 剑指 Offer 44. 数字序列中某一位的数字

    1 剑指 Offer 44 数字序列中某一位的数字 数字以0123456789101112131415 的格式序列化到一个字符序列中 在这个序列中 xff0c 第5位 xff08 从下标0开始计数 xff09 是5 xff0c 第13位是1
  • java银行面试题目及答案,顺利拿到offer

    二 常见的并发问题 1 脏读 一个事务读取了另一个事务未提交的数据 2 不可重复读 一个事务对同一数据的读取结果前后不一致 两次读取中间被其他事务修改了 3 幻读 幻读是指事务读取某个范围的数据时 xff0c 因为其他事务的操作导致前后两次
  • 没有实习我是不是就拿不到大厂offer了吗?---校招答疑

    可能是快放寒假了 xff0c 也可能是再有 2 3 个月就要进入 2020 年春招 xff08 应届生春季校招和暑期实习生招聘 xff09 了 越来越多的同学开始问实习的事情了 我认识的 20 届的同学有已经日常实习两个月以上的 xff0c
  • 一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!

    本文转自 xff1a https mp weixin qq com s MzmdxqukOZ6rUta9nkGGw 本文来自我的知识星球的球友投稿 xff0c 他在最近的校招中拿到了蚂蚁金服的实习生Offer xff0c 整体思路和面试题目
  • 剑指Offer-面试算法题

    1 二分查找 xff08 递归与非递归实现 xff09 基本算法 xff0c 掌握好循环条件 package com company Description 二分查找 xff08 递归与非递归实现 xff09 Created by Wanb
  • 面试屡次碰壁后,我是如何调整最终拿下一线大厂offer的?

    前言 这篇文章 xff0c 主要是聊聊很多同学面试过程中都有的一个担心 xff1a 如果我连续面挂了好几家公司 xff0c 是不是就代表其他公司就同样拿不到offer了 xff1f 首先说明 xff0c 答案绝对是否定的 本文笔者将从一个真
  • 剑指offer T8跳台阶

    由推导可知 xff0c 递推公式为 f n 61 f n 1 43 f n 2 迭代法 xff1a 递归 xff1a 递归优化 xff08 保存结果 xff0c 剪枝 xff09 xff1a 转载于 https www cnblogs co
  • 【LeetCode】剑指 Offer 61. 扑克牌中的顺子 p298 -- Java Version

    题目链接 xff1a https leetcode cn problems bu ke pai zhong de shun zi lcof 1 题目介绍 xff08 61 扑克牌中的顺子 xff09 从若干副扑克牌中随机抽 5 张牌 xff
  • 【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version

    题目链接 xff1a https leetcode cn problems ba zi fu chuan zhuan huan cheng zheng shu lcof 1 题目介绍 xff08 67 把字符串转换成整数 xff09 写一个
  • 程序媛菜鸡面经(八 - offer篇)

    投简历 简历是要多投的 但是有时候投多了简历也会有问题 头条 没有面试机会 在看过简历后HR发邮件告知我 从简历上能看出你是一位很优秀的人 但看不出你在前端 技术方面的竞争力 当时投的是旧版简历 于是我回邮问简历有误能否重申 至今未有回音

随机推荐

  • 【STL】vector简单使用

    参考 需要头文件 span class token macro property span class token directive keyword include span span class token string lt iost
  • 【python效率优化】使用map优化for循环

    python提供的高级函数map将一个函数作用于可迭代对象的每一个元素 xff0c 底层自动实现并行 xff0c 运行速度比for循环要快 xff0c 对于无前后联系的for循环 xff0c 可以使用map进行优化 xff0c 以下例子对比
  • 【数组】121. 买卖股票的最佳时机

    题目 给定一个数组 xff0c 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 xff08 即买入和卖出一支股票一次 xff09 xff0c 设计一个算法来计算你所能获取的最大利润 注意 xff1a 你不能在
  • 【双指针】26. 删除排序数组中的重复项

    题目 给定一个排序数组 xff0c 你需要在 原地 删除重复出现的元素 xff0c 使得每个元素只出现一次 xff0c 返回移除后数组的新长度 不要使用额外的数组空间 xff0c 你必须在 原地 修改输入数组 并在使用 O 1 额外空间的条
  • centos下安装chrome

    到网页 https www google cn chrome 点击安装 下载 rpm安装包 安装即可 root 64 localhost 下载 yum localinstall google chrome stable current x8
  • 【双指针】80. 删除排序数组中的重复项 II

    题目 给定一个排序数组 xff0c 你需要在原地删除重复出现的元素 xff0c 使得每个元素最多出现两次 xff0c 返回移除后数组的新长度 不要使用额外的数组空间 xff0c 你必须在原地修改输入数组并在使用 O 1 额外空间的条件下完成
  • 【双指针】27. 移除元素

    题目 给你一个数组 nums 和一个值 val xff0c 你需要 原地 移除所有数值等于 val 的元素 xff0c 并返回移除后数组的新长度 不要使用额外的数组空间 xff0c 你必须仅使用 O 1 额外空间并 原地 修改输入数组 元素
  • 【栈】155. 最小栈

    题目 设计一个支持 push xff0c pop xff0c top 操作 xff0c 并能在常数时间内检索到最小元素的栈 push x 将元素 x 推入栈中 pop 删除栈顶的元素 top 获取栈顶元素 getMin 检索栈中的最小元素
  • 【数组】初始化、获取长度

    初始化 xff0c 获取长度 span class token keyword public span span class token keyword class span span class token class name main
  • 【Stack】简单使用

    入栈 xff1a add获取栈顶元素 xff1a peek出栈 xff1a pop span class token keyword import span java span class token punctuation span ut
  • 【HashMap】基本操作

    添加键值对put获取key对应的value get遍历 xff1a keySet span class token keyword import span java span class token punctuation span uti
  • 【单调栈】496. 下一个更大元素 I

    题目 给定两个 没有重复元素 的数组 nums1 和 nums2 xff0c 其中nums1 是 nums2 的子集 找到 nums1 中每个元素在 nums2 中的下一个比其大的值 nums1 中数字 x 的下一个更大元素是指 x 在 n
  • 【堆】建堆、插入、删除、堆排序

    参考 堆就是利用数组来实现二叉树 xff0c 可用于构建优先队列 堆排序 TopK问题等 可分为 xff1a 最大堆 xff1a 父节点的值比其子节点大最小堆 xff1a 父节点的值比其子节点小 堆的根节点存放了最小 xff08 或最大 x
  • 【RDD编程】cache持久化使用场景

    Spark中RDD采用惰性求值的机制 xff0c 每次遇到action操作都会触发一次从头开始执行的计算 xff0c 在某些场景下这会使得程序性能大幅度降低 例如下面例子 xff0c 在rdd13 count 时将触发一次从rdd1开始到r
  • 【Java】自带sort库使用

    Arrays sort arr span class token keyword public span span class token keyword class span span class token class name mai
  • 如何使UDEV规则有效

    转 victor 64 X301A1 ls etc udev rules d 70 persistent cd rules 70 persistent net rules README 然后 xff1a victor 64 X301A1 s
  • 【堆】剑指 Offer 40. 最小的k个数

    输入整数数组 arr xff0c 找出其中最小的 k 个数 例如 xff0c 输入4 5 1 6 2 7 3 8这8个数字 xff0c 则最小的4个数字是1 2 3 4 示例 1 xff1a 输入 xff1a arr 61 3 2 1 k
  • 【堆】703. 数据流中的第K大元素

    设计一个找到数据流中第K大元素的类 xff08 class xff09 注意是排序后的第K大元素 xff0c 不是第K个不同的元素 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器 xff0c 它包含数据
  • 【Queue】简单使用

    java中LinkedList实现了Queue接口 xff0c 可以当作队列使用 添加元素 xff1a offer或add方法 xff0c add方法在失败的时候会抛出异常 不推荐 删除元素 xff1a remove和poll方法都是从队列
  • 【树】剑指 Offer 55 - I. 二叉树的深度

    题目 输入一棵二叉树的根节点 xff0c 求该树的深度 从根节点到叶节点依次经过的节点 xff08 含根 叶节点 xff09 形成树的一条路径 xff0c 最长路径的长度为树的深度 例如 xff1a 给定二叉树 span class tok