转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6611397.html 

平衡二叉树(AVL树)

   性质:

1:空树是AVL树;

2:如果一棵树的所有子树,都满足其左子树与右子树的高度差不超过1,则该树是AVL树。

判断

判断平衡二叉树==用“后序遍历”从下往上先遍历左、右子树:遍历时检查子树是否为AVL树,否则结束遍历,该树非平衡

子树是AVL树,则返回子树的深度;

然后遍历根节点:比较左右子树深度得出当前子树是否为平衡二叉树并记录(记录当前子树性质,用于上一层结点遍历时检查用),然后返回左右子树深度较大者作为该子树的高度(用于上一层结点遍历时作为子树深度)

 public boolean check(TreeNode root) {//定义一个引用类型的数据作为平衡标记,通过传引用的方式在递归左右子树时修改平衡标记boolean[] res=new boolean[1];        res[0]=true;//boolean类型默认值为false,这里显示定义树默认为平衡的postCheck(root,1,res);//从根开始遍历树,过程中修改平衡标记return res[0];}public int postCheck(TreeNode root,int depth,boolean[] res){if(root==null){return depth;}int left_depth=postCheck(root.left,depth+1,res);//遍历一次左子树,获取深度(深度已经在参数改变了,目的是为了检查左子树是否平衡)//若遍历左子树过程中修改了平衡标记为false,则子树非平衡,所以当前结点为根的子树非平衡,不再递归,直接返回if(res[0]==false){return depth;}int right_depth=postCheck(root.right,depth+1,res);//若左子树是平衡的,则遍历右子树并获取深度//若遍历右子树过程中修改了平衡标记为false,则子树非平衡,所以当前结点为根的子树非平衡,不再递归,直接返回if(res[0]==false){return depth;}//若左右子树都是平衡的,则对左右子树深度进行比较,判断当前结点为根的子树是否平衡if(Math.abs(left_depth-right_depth)>1){//高度差大于1,当前子树不平衡,修改平衡标记res[0]=false;}//用左右子树深度最大者作为自己的高度return Math.max(left_depth,right_depth);}

二叉树进阶之平衡二叉树的判断相关推荐

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

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

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

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

  3. 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    输入一棵二叉树,判断该二叉树是否是平衡二叉树. //后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class Solution { public:bool IsBalanced(TreeNode ...

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

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

  5. leetcode 110 --- 判断给定的二叉树是否是平衡二叉树

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

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

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

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

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

  8. 面试官:了解二叉树吗,平衡二叉树,红黑树?

    前言 面试过程中,多多少少会问一点数据结构(二叉树)的问题,今天我们来复习一下二叉树的相关问题,文末总结. 1. 二叉树的由来 在 jdk1.8 之前,HashMap 的数据结构由「数组+链表」组成, ...

  9. C++初阶学习————二叉树进阶(二叉搜索树)

    二叉树进阶 二叉搜索树的概念 二叉搜索树的操作 基本框架 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 整体代码 循环写法 递归写法 二叉搜索树的应用 二叉搜索树的性能分析 前面的文章介绍过二 ...

  10. 学习笔记:C++进阶【继承、多态、二叉树进阶、map和set、哈希、C++11、异常、智能指针、特殊类设计、C++的类型转换】

    文章目录 前言 一.继承 1. 继承的概念及定义 1.1 继承的概念 1.2 继承的定义 1.2.1 定义格式 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 2. 基类和派 ...

最新文章

  1. R程序设计中的IF、IFELSE、SWITCH
  2. 谈谈怎么做【服务隔离】
  3. 爱上MVC~Razor引擎时,在遍历中巧用Output.Write方法
  4. 数据结构基础:线性表学习笔记
  5. BABOK - 开篇:业务分析知识体系介绍
  6. Rabbit and Grass【博弈】
  7. 华为P50 Pro/Pro+更多细节曝光:6.7寸120Hz单孔屏 比前作更轻薄
  8. Linux下MySQL server和client安装
  9. jbig java_jbig2 Java Develop 238万源代码下载- www.pudn.com
  10. 深入了解一下PYTHON中关于SOCKETSERVER的模块-A
  11. CST、PVST、PVST+、rapid-PVST+、MSTP
  12. 【强大的数字设计工具包】Sketch 55.1 for Mac
  13. cookie登陆qq空间的两种方式
  14. TTMS剧院票务管理系统全网最全!!!不接受反驳
  15. div+css静态网页设计 web网页设计实例作业 ——中国茶文化(30页) HTML网页制作作品 简单文化网页设计成品 dreamweaver学生网站模板
  16. 【随机一句诗歌】【JS】随机一句诗歌,并且附带点击时间和当前时间。
  17. Flutter Missing parentheses in call to ‘print‘. Did you mean print(‘Insert‘, text,‘to line‘, line_nu
  18. PDF转成JPG,使用PDFTOJPG并去除水印
  19. 随身理财专家“挖财”推iPad应用,新增帐号对比功能
  20. 【HTML | CSS | JAVASCRIPT】一款响应式精美简历模板分享(万字长文 | 附源码)

热门文章

  1. 二十一天学通C语言:函数型指针
  2. 你是否需要购买网站重构?
  3. 文件自动备份和同步bypy和syncthing
  4. windows命令行设置和系统快捷键
  5. systemctl命令_开发者必备Linux命令
  6. linux数据库redis主从配置,redis介绍及主从配置
  7. 《别输在不会表达上》— 综合素质提升书籍
  8. 7-2 两个数的简单计算器 (10 分)
  9. Linux的EXPORT_SYMBOL和EXPORT_SYMBOL_GPL的使用和区别
  10. MySQL 5.7 自带的四个数据库 介绍