平衡二叉树 (空树或者左右两个孩子高度差不超过1)

在涉及到二叉树的题目时,递归函数非常好用

列出可能性-》整理出返回值的类型-》整个递归过程按照同样的结构得到子树的信息,整合子树的信息,加工出应该返回的信息,向上返回

1.左子树是否平衡

2.右子树是否平衡

3.左子树的高度

4.右子树的高度

根据可能性,使用递归函数

可能性-》返回值的类型

//列出可能性  左右子树是否分别平衡,若平衡后,左右子树的高度public static class ReturnData{boolean isB;int high;public ReturnData(boolean isB, int high){this.isB = isB;this.high = high;}}

  

整个递归过程按照同样的结构得到子树的信息(左子树和右子树分别是否平衡,以及它们的高度),整合子树的信息(左右子树的高度差是否符合要求),加工出返回的信息(应该返回左右子树中,高度较大的那一个high+1

public static ReturnData process(Tree tree){if(tree == null) return new ReturnData(true, 0);ReturnData leftData = process(tree.left);if(!leftData.isB){return new ReturnData(false, 0);}ReturnData rightData = process(tree.right);if(!rightData.isB){return new ReturnData(false, 0);}if(Math.abs(leftData.high - rightData.high) > 1){return new ReturnData(false, 0);}return new ReturnData(true, Math.max(leftData.high, rightData.high) + 1);}

  

整体的代码

public class IsBanlancedTree {//列出可能性  左右子树是否分别平衡,若平衡后,左右子树的高度public static class ReturnData{boolean isB;int high;public ReturnData(boolean isB, int high){this.isB = isB;this.high = high;}}public static ReturnData process(Tree tree){if(tree == null) return new ReturnData(true, 0);ReturnData leftData = process(tree.left);if(!leftData.isB){return new ReturnData(false, 0);}ReturnData rightData = process(tree.right);if(!rightData.isB){return new ReturnData(false, 0);}if(Math.abs(leftData.high - rightData.high) > 1){return new ReturnData(false, 0);}return new ReturnData(true, Math.max(leftData.high, rightData.high) + 1);}public static boolean isBanlancedTree(Tree tree){return process(tree).isB;}
}

  

  

转载于:https://www.cnblogs.com/SkyeAngel/p/8947290.html

二叉树——判断一棵树是否是平衡二叉树相关推荐

  1. 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树

    数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡而二叉树 目录 二叉树的序列化和反序列化 判断一棵树是否为平衡而二叉树 1. 二叉树的序列化和反序列化 1. 递归版本序列化和反序列化 代 ...

  2. 判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树

    package class_04;import java.util.LinkedList; import java.util.Queue; /*** * 判断一棵树是否是搜索二叉树* 判断一棵树是否是 ...

  3. 二叉树 判断一棵树是否是另一棵树的子树

    题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 ...

  4. 110  判断一棵树是否是平衡二叉树

    点击此处返回总目录 [题目] [分析] 什么是平衡二叉树.就是每一个结点的左右子树的高度差不超过1. [方法] 怎么求呢?一个很正常的想法是:首先判断左子树是不是平衡二叉树,然后判断右子树是不是平衡二 ...

  5. 判断一棵树是否为平衡二叉树

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

  6. 判断一棵树是否为完全二叉树的算法c语言_[二叉树的面试算法](六)之二叉树结构判断-相关题型总结(4题)...

    在线oj练习地址 判断两棵二叉树是否相同_leetcode100 判断一棵树是否是平衡二叉树_leetcode110 翻转二叉树_leetcode226 判断一棵树是否为对称二叉树_leetcode1 ...

  7. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树

    数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...

  8. 如何判断一棵树是否是满二叉树

    判断一棵树是否是满二叉树 1.满二叉树定义 2.如何判断一棵树是否是满二叉树 3.代码 1.满二叉树定义 除最后一层无子节点外,其他层的所有节点都有两个子节点的二叉树就是满二叉树.如下图所示: 2.如 ...

  9. 判断一棵树是否为排序二叉树(二叉搜索树)

    问题:判断一棵树是否为排序二叉树(二叉搜索树) 思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树 程序实现: #include <iostream> #incl ...

最新文章

  1. [Spring 深度解析]第2章 Spring基础
  2. uwsgi模式_nginx+uwsgi 和nginx+gunicorn区别、如何部署
  3. A题 Go! Fun游长三角 2021年第一届长三角高校数学建模竞赛
  4. Mybatis动态的添加删除列
  5. Vue-router路由基础总结(一)
  6. python删除列表中的重复值_如何从 Python 列表中删除重复项
  7. 工作215:打印出父子组件的this
  8. 双11大考 POLARDB分钟级弹性让企业轻松扩展 1
  9. JS_模块的命名空间
  10. VB.NET2005通过泛型实现的KMP查找算法
  11. set容器内元素的访问
  12. 分贝噪音测试软件文件存储,手机分贝噪音测试软件
  13. 金笛JDMAIL邮件系统办公管理—文件中转站
  14. cocoscreator的游戏背景适配方案
  15. 计算机毕设网页设计源码——HTML+CSS+JS+Bootstrap在线音乐试听播放网站模板
  16. 关于安卓如何实现计时器chronometer的暂停和继续计时功能
  17. ## 关于二阶振荡因子的伯德图的一些解读
  18. 利用python发邮件
  19. Redis高负载排查记录
  20. dw建php网站,dw怎么新建站点?新建站点四种方法图解

热门文章

  1. 自己开发的一款基于PagedDataSource的datalist repeater控件,只需要在源程序中添加三行代码,即可实现通用分页
  2. 漫步数理统计七——随机变量(上)
  3. js修改背景图片路径_前端面试题————关键渲染路径(Critical Rendering Path)...
  4. 【C++】C++中的头文件(.h)—详解(1)
  5. Python 对象的初始化函数及调用函数
  6. NDK编译c包含C++头文件时,出现 error: unknown type name 'class' 的解决方法
  7. 服务连接不上nacos集群_Rust 微服务实践: 连接 rust , nacos , spring cloud
  8. 算法竞赛——归并排序算法
  9. Matlab 图像采集工具的使用 - Image Acquisition Toolbox【IAT】 + 大恒相机的应用【1】+多个摄像头支持
  10. 浙江移动智能语音服务器,接口说明