Keep Balance,平衡二叉树!
Posted 小浩编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keep Balance,平衡二叉树!相关的知识,希望对你有一定的参考价值。
我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复【资源】,即可获取!更可回复【内推】加入 BAT 内推群!
在之前的系列中,我们已经学习了,如果不会可以先查看之前的文章。今天我们将对其进行应用,直接看题目。
01、题目分析
第110题:平衡二叉树 |
---|
给定一个二叉树,判断它是否是高度平衡的二叉树。 |
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false 。
02、图解分析
首先分析题目,这道题思路很简单,我们想判断一棵树是否满足平衡二叉树,无非就是判断当前结点的两个孩子是否满足平衡,同时两个孩子的高度差是否超过1。那只要我们可以得到高度,再基于高度进行判断即可。
我们先复习一下之前对于树高度的求解:
这里唯一要注意的是,当我们判定其中任意一个节点如果不满足平衡二叉树时,那说明整棵树已经不是一颗平衡二叉树,我们可以对其进行阻断,不需要继续递归下去。
另外,需要注意的是,下面这棵并不是平衡二叉树:
03、代码分析
根据分析,逻辑非常清晰,顺利得出代码:
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
if !isBalanced(root.Left) || !isBalanced(root.Right) {
return false
}
leftH := maxDepth(root.Left) + 1;
rightH := maxDepth(root.Right) + 1;
if abs(leftH-rightH) > 1 {
return false
}
return true
}
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
return max(maxDepth(root.Left),maxDepth(root.Right)) + 1
}
func max(a,b int) int {
if a > b {
return a
}
return b
}
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
执行结果:
我们欢迎你!
随意展示一张导图内容(所有的子节点都可以打开):
如何选购适合自己的电动牙刷?
-
先选择震动模式,旋转还是声波? -
根据模式去选择品牌 -
同个品牌不同型号的关键参数及人性化 -
根据预算做出自己的选择
大家怎么看呢?评论区留下你的想法吧!
以上是关于Keep Balance,平衡二叉树!的主要内容,如果未能解决你的问题,请参考以下文章