
剑指 offer之平衡二叉树_java
发布日期:2021-05-07 02:40:35
浏览次数:27
分类:精选文章
本文共 1610 字,大约阅读时间需要 5 分钟。
题目:平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解决方案: 从顶至底(暴力法) 构造一个获取当前节点最大深度的方法 getHight() ,通过比较左右子树最大高度差Math.abs(left-right),来判断以此节点为根节点下是否是二叉平衡树; 从顶至底DFS,以每个节点为根节点,递归判断是否是平衡二叉树: 若所有根节点都满足平衡二叉树性质,则返回 True ; 若其中任何一个节点作为根节点时,不满足平衡二叉树性质,则返回False。 本方法产生大量重复的节点访问和计算,最差情况下时间复杂度 O(N^2)。 代码实现:import java.util.*;public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null) { return true; } //当节点不为空时,找到root左节点的高度 int left=getHight(root.left); //找到root右节点的高度 int right=getHight(root.right); //左节点和右节点的高度之和小于等于1 && root的左子树/右子树同样满足这个条件 if((Math.abs(left-right)>1)){ return false; }else{ //每一层都有相同的特性 return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); } } private int getHight(TreeNode root) { if(root==null) { return 0; } int left=getHight(root.left); int right=getHight(root.right); return Math.max(left, right)+1; }}
ps: 来源于力扣评论区某位大佬的想法
从底至顶(提前阻断法) 对二叉树做深度优先遍历DFS,递归过程中: 终止条件:当DFS越过叶子节点时,返回高度0; 返回值: 从底至顶,返回以每个节点root为根节点的子树最大高度(左右子树中最大的高度值加1max(left,right) + 1); 当我们发现有一例 左/右子树高度差 > 1 的情况时,代表此树不是平衡树,返回-1; 当发现不是平衡树时,后面的高度计算都没有意义了,因此一路返回-1,避免后续多余计算。 最差情况是对树做一遍完整DFS,时间复杂度为 O(N)。 代码实现:public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null) { return true; } return getHight(root)!=-1; } private int getHight(TreeNode root) { if(root==null) { return 0; } int left=getHight(root.left); if(left==-1) {return -1;} int right=getHight(root.right); if(right==-1) {return -1;} return Math.abs(left-right)<2?Math.max(left, right)+1:-1; }}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月27日 23时48分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
快速指数算法
2021-05-09
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2021-05-09
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2021-05-09
Spring 框架基础(01):核心组件总结,基础环境搭建
2021-05-09
Cassandra数据建模
2021-05-09
Internet Explorer 10 专题上线
2021-05-09
云计算之路-阿里云上:0:25~0:40网络存储故障造成网站不能正常访问
2021-05-09
网站故障公告1:使用阿里云RDS之后一个让人欲哭无泪的下午
2021-05-09
上周热点回顾(6.3-6.9)
2021-05-09
上周热点回顾(8.12-8.18)
2021-05-09
【故障公告】升级阿里云 RDS SQL Server 实例故障经过
2021-05-09
蹒跚来迟:新版博客后台上线公测
2021-05-09
[网站公告]11月26日00:00-04:00阿里云RDS升级
2021-05-09
[网站公告]又拍云API故障造成图片无法上传(已恢复)
2021-05-09
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
2021-05-09
上周热点回顾(6.9-6.15)
2021-05-09
上周热点回顾(10.20-10.26)
2021-05-09
上周热点回顾(2.16-2.22)
2021-05-09
上周热点回顾(3.2-3.8)
2021-05-09
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
2021-05-09