字节考过的面试题!你真的会吗?110. 平衡二叉树(含不同解法)
创作时间:
作者:
@小白创作中心
字节考过的面试题!你真的会吗?110. 平衡二叉树(含不同解法)
引用
CSDN
1.
https://blog.csdn.net/2301_79417489/article/details/145522832
本文将详细介绍如何判断一个二叉树是否是平衡二叉树,包括暴力求解和优化解法两种方法。通过本文的学习,你将能够掌握平衡二叉树的判断方法,并能够编写相应的代码实现。
第一次做不用力求优化,没能力优化就先暴力解题,等能暴力解出来再递进到优化。
题目链接: 110. 平衡二叉树
题目: 给定一个二叉树,判断它是否是 平衡二叉树。
解法一:暴力求解O(N^2)
暴力解法的思路 :对于每个节点,计算其左右子树的高度,检查高度差是否超过1。如果所有节点都满足这个条件,那么整个树就是平衡的。
但这个方法的时间复杂度很高,因为每个节点的高度会被重复计算多次。例如,对于根节点,需要计算左右子树的高度,而这两个子树的高度计算又会递归到底层节点,导致时间复杂度为O(n^2),这在节点数较多时效率不高。
- 核心思路
暴力求解的思路不会通过,会超时。
step1. 平衡二叉树定义
判断是否为平衡二叉树,需 同时满足 以下条件:
- 每个节点 的左右子树的高度差不超过1
- 每个节点 的左右子树本身也是平衡二叉树
step2. 实现要点
- 定义一个方法用于求树的高度。
- 递归遍历树的每个节点。
- 求每个节点的左右子树各自的高度,判断是不是平衡二叉树。
- 细化要点
2.1 定义一个方法用于求树的高度。
//求一棵树的高度
private int maxDepth(TreeNode root) {
if (root == null){
return 0;
}
int leftCount = maxDepth(root.left);
int rightCount = maxDepth(root.right);
return Math.max(leftCount,rightCount) + 1;
}
2.2 终止条件(平衡二叉树的定义)
节点为null,返回true。
//空树 if (root == null){ return true; }
每个节点的左右子树的高度差超过1,返回false。
//求出左右子树高度的最大值 int depth = Math.abs(maxDepth(root.left)-maxDepth(root.right)); //左右子树的高度差不超过1 if (depth > 1){ return false; }
左右子树本身是平衡二叉树,返回true。
//左右子树本身也是平衡二叉树 return isBalanced(root.left) && isBalanced(root.right);
解法二:优化O(N)
高度重复求,导致复杂度过高,优化从减少重复计算高度入手。那就计算高度的同时判断是否平衡。在求高度的方法内加上判断语句即可。
【代码演示】
class Solution {
public boolean isBalanced(TreeNode root) {
//空树
if (root == null){
return true;
}
return maxDepth(root) != -1;
}
//求一棵树的高度
private int maxDepth(TreeNode root) {
if (root == null){
return 0;
}
int leftCount = maxDepth(root.left);
if (leftCount == -1){
return -1;
}
int rightCount = maxDepth(root.right);
if (rightCount == -1 ||Math.abs(leftCount - rightCount) > 1){
return -1;
}
return Math.max(leftCount,rightCount) + 1;
}
}
热门推荐
羽毛球拍磅数怎么选?高磅数与低磅数的优缺点分析
员工工作失误如何处理?企业应对策略与法律依据深度解析
太厉害了!17天,1824公里!绍兴母子俩,一路骑到北京!
CDN如何优化Nginx性能的实现?
无穷大并不等于无穷大:数学中的无限与不确定性
合成纤维完全指南:涤纶、锦纶、腈纶、氨纶、丙纶的特性与应用
生命成分是如何来到地球的
态势感知:解锁网络安全的新篇章
UPS+储能的应用及效益分析
UPS锂电池替代铅酸电池环保与效能的革命
孕妇不能吃哪些食物?孕妇饮食禁忌大揭秘:这些食物碰不得!
市场的机遇与挑战:分散投资与定投的重要性
新手必备!《星露谷物语》理想农场打造全攻略
房屋拆迁安置协议有哪些内容?
寂静的春天:开启环保运动的里程碑之作
崩坏星穹铁道大黑塔培养攻略:光锥遗器与配队推荐
起夜排尿超过2次是肾不好?错!这6个健康隐患更值得关注
美国租车攻略:5个步骤轻松租到车,保险、加油全攻略
让宝宝爱上蔬菜的小妙招
韭菜种植和管理的方法 韭菜栽培技术要点
网购商品"货不对版"怎么办?法院发布三起典型案例
优秀领导者的8种必要素质,看看你差了什么?
SQL语句中AND与OR操作符的优先级问题
提高对人禽流感的发现报告能力
个人征信记录详细版查询方法及步骤
一个水煮蛋的热量是多少
拔牙后多久可以运动健身锻炼好
职工养老保险能转成居民养老保险吗?一文详解养老保险转移、累计与补交
工作调动的注意事项与成功技巧分享
C语言中scanf函数报错怎么办?八大维度全面解析scanf使用误区