LeetCode 110 平衡二叉树 -- 递归法

news/2024/7/20 21:36:35 标签: leetcode, 算法, 深度优先

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/balanced-binary-tree


题意:

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:
输入:root = []
输出:true

提示:
树中的节点数在范围 [0, 5000] 内
-104 <= Node.val <= 104


参考文章

思路:

首先要理解好平衡二叉树的概念,这里在题意中就已经说明了。
这里我们使用递归法的做法。
当getHeight方法返回-1时,意味着子树不平衡的,那么就说明这整棵树都是不平衡的,直接接着返回-1即可。
如果getHeight方法返回的是非负数,则返回的是当前子树的高度,将两个儿子的子树高度相减,差大于1即当前树是不平衡的,返回-1。
如果当前树是平衡的,返回它的高度。
结果只需判断这棵树是否是平衡的就行,即看返回值是不是-1即可。

本题Java代码:

class Solution {
	public boolean isBalanced(TreeNode root) {
		return getHeight(root) != -1;
	}

	private int getHeight(TreeNode node) {
		if (node == null)
			return 0;
		int leftHeight = getHeight(node.left);
		int rightHeight = getHeight(node.right);
		if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1)
			return -1;
		return Math.max(leftHeight, rightHeight) + 1;
	}
}

http://www.niftyadmin.cn/n/1803138.html

相关文章

python学习 day12 (3月18日)----(装饰器内置函数)

读时间函数&#xff1a; # import time # def func(): # start_time time.time() # 代码运行之前的时间 # print(这是一个func函数) # time.sleep(3) # 阻塞,睡一下, 1 是睡一秒 # print(time.time() - start_time) # 代码运行后的时间 # func() View Code…

js时间函数

备注&#xff08;获得其他的日期格式&#xff09;&#xff1a; var date new Date();date.getYear(); //获取当前年份(2位)date.getFullYear(); //获取完整的年份(4位,1970-????)date.getMonth(); //获取当前月份(0-11,0代表1月)date.getDate(); /…

LeetCode 257 二叉树的所有路径 -- 递归法

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems/binary-tree-paths 题意&#xff1a; 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子…

《密码与安全新技术专题》论文学习及报告总结

20189208 2018-2019-2 《密码与安全新技术专题》论文学习及报告总结 课程&#xff1a;《密码与安全新技术专题》 班级&#xff1a; 1892 姓名&#xff1a; 杨晨曦 学号&#xff1a;20189208 上课教师&#xff1a;谢四江 上课日期&#xff1a;2019年5月21日 必修/选修&#xff1…

SELECT(データ取得)

WHERE 句は、満たすべき条件を指定することにより選択される行数を制限します。 WHERE 句は、SELECT 命令と同様に OPEN CURSOR、UPDATE、および DELETE 命令でも使用されます。WHERE 句の標準形式は以下のとおりです。 SELECT... WHERE cond... WHERE 句の cond 条件は、比較ま…

springboot 使用AOP进行操作日志处理

1.在做项目的时候有这样的需求可以记录每个用户在登录之后都干了什么&#xff0c;要是有人不小心删除了东西这样就有点不好了&#xff0c;总要记录一下是谁干的吧 所以就有了日志 第一步&#xff1a;添加依赖 <dependency><groupId>org.springframework.boot</g…

编程算法 - 数字在排序数组中出现的次数 代码(C)

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主同意不得转载。 https://blog.csdn.net/u012515223/article/details/36869869 数字在排序数组中出现的次数 代码(C)本文地址: http://blog.csdn.net/caroline_wendy题目: 统计一个数字在排序数组中出现的次数.通过折…

大量Time_Wait和Close_Wait状态下的TCP连接问题解决

今天公司一个网站突然打开特别慢&#xff0c;有时候还会出现打不开的情况&#xff0c;开始怀疑是网络问题&#xff0c;但网络排查没有发现任何异常&#xff0c;最后还是决定在网站服务器内部排查问题 网站用的中间件是apache&#xff0c;监听端口7080&#xff0c;先查看一下708…