Coding Interview Guide -- 判断二叉树是否为平衡二叉树
【题目】
平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。给定一棵二叉树的头节点head,判断这棵二叉树是否为平衡二叉树
【要求】
如果二叉树的节点数为N,要求时间复杂度为O(N)
【分析】
平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。平衡二叉树的任一子树也是平衡二叉树,所以如果二叉树的某一节点的左右子树高度差的绝对值超过了1,则该二叉树必定不是平衡二叉树。所以在递归求树高的过程中,计算当前节点的左右子树高度差的绝对值是不是超过了1,如果没有超过,则表明以当前节点为头节点的子树是平衡二叉树,需继续判断其它子树是否为平衡二叉树;如果超过了,说明该二叉树一定不是平衡二叉树,此时不用再继续判断其它子树。
1 public boolean isBalanceTree(Node head) 2 { 3 if(head == null) // 平衡二叉树可以是空树 4 { 5 return true; 6 } 7 8 boolean[] res = new boolean[1]; // res记录是否为平衡二叉树 9 res[0] = true; 10 getHeight(head, 1, res); 11 return res[0]; 12 } 13 14 public int getHeight(Node head, int level, boolean[] res) 15 { 16 if(head == null) 17 { 18 return level; 19 } 20 21 int l = getHeight(head.left, level+1, res); 22 if(!res[0]) // 只要任一子树不是平衡二叉树,则整个二叉树就不是平衡二叉树,直接返回 23 { 24 return level; 25 } 26 int r = getHeight(head.right, level+1, res); 27 if(!res[0]) 28 { 29 return level; 30 } 31 if(Math.abs(l - r) > 1) // 高度差的绝对值超过1,不是平衡二叉树 32 { 33 res[0] = false; 34 } 35 36 return Math.max(l, r); 37 }
来源:左程云老师《程序员代码面试指南》
转载于:https://www.cnblogs.com/latup/p/10885369.html
Coding Interview Guide -- 判断二叉树是否为平衡二叉树相关推荐
- python判断二叉树是否为平衡二叉树
python判断二叉树是否为平衡二叉树 树是数据结构中的重中之重,尤其以各类二叉树为学习的难点.一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列.在学习与总结的同时更加 ...
- 判断二叉树是否为平衡二叉树
题目:判断二叉树是否为平衡二叉树 思路:迭代,需要借助二叉树的高度,判断一个树是否为平衡二叉树,则判断其左子树和右子树是否为平衡二叉树 public static boolean isAVLRec(T ...
- 左神算法:判断二叉树是否为平衡二叉树(树形dp套路,Java版)
本题来自左神<程序员代码面试指南>"判断二叉树是否为平衡二叉树"题目. 题目 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. ...
- 判断二叉树是否是平衡二叉树
平衡二叉树(Balanced Binary Tree)又被称为AVL树:且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 主要实现思路: ...
- 判断二叉树是否为平衡二叉树(递归)
题目描述 本题要求判断给定的二叉树是否是平衡二叉树 平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. 一颗树的高度指的是树的根节点到所有节点的距离中的最大值. ...
- java 判断二叉树是否平衡_剑指Offer - 判断二叉树是否是平衡二叉树
平衡二叉树的条件:为空或者子树高度之差的绝对值小于等于1,且子树也是平衡二叉树 最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进 ...
- 判断二叉树是否是平衡二叉树(dp tree)
二叉树节点个数为N, 时间复杂度为O(N) def process(head):#['是否平衡','树的高度']if head == None:return [True,0]left = proces ...
- Coding Interview Guide -- 括号字符串的有效性和最长有效长度
[题目] 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true:str = "(()())",返回true:str = ...
- Coding Interview Guide -- 数组的partition调整
[题目] 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序 例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, ...
- Coding Interview Guide -- 向有序的环形单链表中插入新节点
[题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...
最新文章
- 设计模式之Dynamic Proxy-动态代理
- 海外应用市场排名前列的VivaVideo All in阿里云
- 京东Vue组件库NutUI 2.0发布:将支持跨平台!
- linux下,保存退出vim编辑器(转)
- 51CTO网站博客改版意见寻求
- Audiority TS-1 Transient Shaper for Mac(TS-1瞬态整形器)
- matlab win10 精简版下载,完美解决win10无法运行matlab问题
- POJ 3744 Scout YYF I
- 超图android离线瓦片,android端实践openlayers离线地图
- 有域名和服务器怎么建设网站新手,新手如何快速搭建一个新的网站【零基础】...
- 【BP神经网络】西瓜分类和鸢尾花分类
- java arraylist 求和_java-ArrayList中类对象属性的总和
- 关于ETD.sys的系统蓝屏问题的解决
- 【Spark SQL:计算平均分】
- 商品出库入库项目html,纯前端微型出入库管理系统(个人使用型)
- 首都师范 博弈论 4 1 1三人博弈的纳什均衡
- 【Python】根据CID获取化合物数据(调用Pubchem官方API)
- 通达信筹码集中度计算公式,解决了结果不同的问题
- jira数据库表结构
- 华科2019年计算机专业全国排名,2019华中科技大学专业排名
热门文章
- php中绘制长方体,php代码将常见的长方形图片修改为正方形的图片
- [渝粤教育] 陕西科技大学 食品营养安全与健康 参考 资料
- 通俗认识理解OpenAI Five
- 最大似然估计、MAP及贝叶斯估计
- Centos 7 下配置codeblocks13.12的googletest单元测试环境
- leetcode 703. 数据流中的第K大元素(Kth Largest Element in a Stream)
- linux-ssh免密登录
- 正则表达式,以python为例
- 硬盘ext2/3文件系统superblock损坏修复试验
- HTML5 20180918