推断的思路非常easy。若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,而且左右子树的高度差小于等于1。注意。实现的时候,推断左右子树的平衡性时。能够顺便计算子树高度,不用再另外计算一次。以下是其递归实现:

#include <iostream>
using namespace std;
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:bool isBalanced(TreeNode *root) {int height;return myBalance(root,height);}bool myBalance(TreeNode *root, int &height){//注意,将height用引用传进来if(root==NULL){//若为空,高度就为0,平衡height=0;return true;}int leftHeight;int rightHeight;bool leftBalance=myBalance(root->left,leftHeight);//root的左子树平衡吗?bool rightBalance=myBalance(root->right,rightHeight);//root的右子树平衡吗?height=max(leftHeight,rightHeight)+1;//以root为根的这棵树的高度。是root的左子树、右子树中的较高者加上root本身这个结点(即加1)if(leftBalance && rightBalance && abs(leftHeight-rightHeight)<=1)//假设左子树平衡,右子树平衡,而且左右子树高度差小于等于1return true;return false;}
};
int main()
{TreeNode *root=new TreeNode(1);TreeNode *left=new TreeNode(2);TreeNode *right=new TreeNode(3);root->left=left;root->right=right;Solution *s=new Solution();cout<<s->isBalanced(root)<<endl;system("pause");return 0;
}

怎样推断一棵树是否是平衡二叉树相关推荐

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

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

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

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

  3. 二叉树——判断一棵树是否是平衡二叉树

    平衡二叉树 (空树或者左右两个孩子高度差不超过1) 在涉及到二叉树的题目时,递归函数非常好用 列出可能性->整理出返回值的类型->整个递归过程按照同样的结构得到子树的信息,整合子树的信息, ...

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

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

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

    1.先给出树节点信息 typedef struct tree{struct tree *lchild;struct tree *rchlid;int data; }tree,* Bitree; 2.原 ...

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

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

  7. 怎样推断一棵二叉树是全然二叉树

    严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树.这个概念非常好理解, 就是一棵树,深度为k,而且没有空位. 首先对满二叉树依照广度优先遍历(从左到右)的顺序进行编 ...

  8. 一棵树,怎么就平衡了(图解AVL+实现)

    什么是AVL树 大家好,我是bigsai,好久不见,甚是想念. 对于树这种数据结构,想必大家也已经不再陌生,我们简单回顾一下. 在树的种类中,通常分成二叉树和多叉树,我们熟悉的二叉树种类有二叉搜索(排 ...

  9. 数据结构-动态查找树表与平衡二叉树 红黑树简单介绍

    参考资料 数据结构(严蔚敏) 大话数据结构 百度百科 https://blog.csdn.net/lpp0900320123/article/details/39524947 https://mp.w ...

最新文章

  1. SpringBoot源码分析之@Scheduled
  2. maven的tomcat插件如何进行debug调试
  3. AD9288的介绍和使用
  4. python官方网站地址-一些python牛人地址分享
  5. 顽皮恶魔 牛客白月赛44
  6. python字符串合并去重_015day--python集合和字符串
  7. LNK2019无法解析的外部符号 public: static struct cv::Ptr class cv::xfeatures2d::SURF问题解决
  8. Android使用Application的好处
  9. 【Spring学习笔记-MVC-1.3】消息转换器HttpMessageConverter
  10. R语言ggplot2绘图
  11. Roblox、Epic Games和Meta,详解三巨头如何引爆元宇宙
  12. linux美元符号切换为井号,struts2 (# % $)井号,百分号,美元符号的含义和使用方法举例...
  13. C语言基础入门,编程的第一步
  14. python实现从oracle读数据写入mysql(1)
  15. Unity获取物体自身坐标轴的方向以及沿着该方向运动的方法
  16. jsTable 生成Excel表格xlsx表格
  17. 计算机模拟爆破过程,基于LSDYNA岩石爆破模拟建模分析
  18. 老闪创业那些事儿(38)——小龙的离职面谈
  19. android端向后台传图片,Android前台从后台下载一张图片 以及 Android前台上传一张图片到后台...
  20. 除尘机器人毕业_一种除尘机器人的制作方法

热门文章

  1. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...
  2. FPGA时序案例分析【Vivado版】
  3. 浅谈JS原型与原型链(一)
  4. 浅谈Laravel中的设计模式(四) Contract 契约模式
  5. 【工具方法util】JAVA中将一个List等分成n个list的
  6. Intel AMT 可以获得的系统电源状态
  7. 专用ADC与群集软件之比较
  8. SQL Server 2016新特性:列存储索引新特性
  9. WordPress插件开发: 文章同步到OSC博客插件(OscPress) (四)
  10. JavaScript——基本的瀑布流布局及ajax动态新增数据