题目

  平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过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 -- 判断二叉树是否为平衡二叉树相关推荐

  1. python判断二叉树是否为平衡二叉树

    python判断二叉树是否为平衡二叉树 树是数据结构中的重中之重,尤其以各类二叉树为学习的难点.一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列.在学习与总结的同时更加 ...

  2. 判断二叉树是否为平衡二叉树

    题目:判断二叉树是否为平衡二叉树 思路:迭代,需要借助二叉树的高度,判断一个树是否为平衡二叉树,则判断其左子树和右子树是否为平衡二叉树 public static boolean isAVLRec(T ...

  3. 左神算法:判断二叉树是否为平衡二叉树(树形dp套路,Java版)

    本题来自左神<程序员代码面试指南>"判断二叉树是否为平衡二叉树"题目. 题目 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. ...

  4. 判断二叉树是否是平衡二叉树

    平衡二叉树(Balanced Binary Tree)又被称为AVL树:且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 主要实现思路: ...

  5. 判断二叉树是否为平衡二叉树(递归)

    题目描述 本题要求判断给定的二叉树是否是平衡二叉树 平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. 一颗树的高度指的是树的根节点到所有节点的距离中的最大值. ...

  6. java 判断二叉树是否平衡_剑指Offer - 判断二叉树是否是平衡二叉树

    平衡二叉树的条件:为空或者子树高度之差的绝对值小于等于1,且子树也是平衡二叉树 最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进 ...

  7. 判断二叉树是否是平衡二叉树(dp tree)

    二叉树节点个数为N, 时间复杂度为O(N) def process(head):#['是否平衡','树的高度']if head == None:return [True,0]left = proces ...

  8. Coding Interview Guide -- 括号字符串的有效性和最长有效长度

    [题目] 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true:str = "(()())",返回true:str = ...

  9. Coding Interview Guide -- 数组的partition调整

    [题目] 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序 例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, ...

  10. Coding Interview Guide -- 向有序的环形单链表中插入新节点

    [题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...

最新文章

  1. 设计模式之Dynamic Proxy-动态代理
  2. 海外应用市场排名前列的VivaVideo All in阿里云
  3. 京东Vue组件库NutUI 2.0发布:将支持跨平台!
  4. linux下,保存退出vim编辑器(转)
  5. 51CTO网站博客改版意见寻求
  6. Audiority TS-1 Transient Shaper for Mac(TS-1瞬态整形器)
  7. matlab win10 精简版下载,完美解决win10无法运行matlab问题
  8. POJ 3744 Scout YYF I
  9. 超图android离线瓦片,android端实践openlayers离线地图
  10. 有域名和服务器怎么建设网站新手,新手如何快速搭建一个新的网站【零基础】...
  11. 【BP神经网络】西瓜分类和鸢尾花分类
  12. java arraylist 求和_java-ArrayList中类对象属性的总和
  13. 关于ETD.sys的系统蓝屏问题的解决
  14. 【Spark SQL:计算平均分】
  15. 商品出库入库项目html,纯前端微型出入库管理系统(个人使用型)
  16. 首都师范 博弈论 4 1 1三人博弈的纳什均衡
  17. 【Python】根据CID获取化合物数据(调用Pubchem官方API)
  18. 通达信筹码集中度计算公式,解决了结果不同的问题
  19. jira数据库表结构
  20. 华科2019年计算机专业全国排名,2019华中科技大学专业排名

热门文章

  1. php中绘制长方体,php代码将常见的长方形图片修改为正方形的图片
  2. [渝粤教育] 陕西科技大学 食品营养安全与健康 参考 资料
  3. 通俗认识理解OpenAI Five
  4. 最大似然估计、MAP及贝叶斯估计
  5. Centos 7 下配置codeblocks13.12的googletest单元测试环境
  6. leetcode 703. 数据流中的第K大元素(Kth Largest Element in a Stream)
  7. linux-ssh免密登录
  8. 正则表达式,以python为例
  9. 硬盘ext2/3文件系统superblock损坏修复试验
  10. HTML5 20180918