一、二叉树的深度与高度

1、二叉树的深度

对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的。因此访问某个节点的深度要使用先序遍历

2、二叉树的高度

对于二叉树中的某个节点其高度是从叶子节点到该节点的最长简单路径包含的节点个数,是从下面向上面数的。因此访问某个节点的高度需要使用后续遍历

3、二叉树的深度与高度辨析

每层节点的深度和高度如图所示:

4、二叉树的深度与高度的联系

一个二叉树根节点的高度就是这个二叉树的最大深度

二、二叉树的高度

1、递归法

递归三要素:

  1. 递归返回值和参数:返回值为当前节点的高度,参数为当前节点
  2. 递归单层逻辑:当前节点高度 = 1 + max(左子树高度,右子树高度)
  3. 递归终止条件:当前节点为空,返回高度为0,结束递归

2、递归法代码

class Solution {public://递归参数及返回值int height(TreeNode* root) {//递归终止条件if(root == nullptr) return 0;//单层递归逻辑int leftheight = height(root->left);int rightheight = height(root->right);return 1 + max(leftheight , rightheight );}
};

三、平衡二叉树

110.平衡二叉树

平衡二叉树定义:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

1、递归法解题思路

给定一个节点,分别求取其左右孩子为根节点的子树的高度,相比较是否相差1。而一旦有子树不为平衡二叉树的时候,该结果需要递归传递,最后输出整棵树不是平衡二叉树

  1. 递归返回值和参数:递归返回值为当前节点为根节点的二叉树高度,当前二叉树是否为平衡二叉树,参数为当前节点
  2. 单层递归逻辑:当前节点二叉树高度 = 1 + max(左子树高度,右子树高度);当前节点是否为平衡二叉树 = 左子树高度与右子树高度差值是否大于1
  3. 递归结束条件:当前节点为空,二叉树高度为0,当前节点时平衡二叉树

优化:我们可以利用树木的高度为-1来表示子树不是平衡二叉树,从而减少返回参数

2、递归法解题代码

class Solution {public://递归返回值和参数int treeheight(TreeNode* root){//递归终止条件if(root == nullptr) return 0;//单层递归逻辑//获取左右树高度,如果左右树已经存在不平衡,递归终止,直接返回-1int leftheight = treeheight(root->left);if(leftheight == -1) return -1;int rightheight = treeheight(root->right);if(rightheight == -1) return -1;//如果左右树不存在不平衡,根据左右树高度计算当前节点是否平衡,以返回当前高度或-1if(abs(leftheight - rightheight) > 1) return -1;return 1 + max(leftheight, rightheight);}bool isBalanced(TreeNode* root) {//调用递归判定是否为平衡二叉树if(treeheight(root) != -1) return true;return false;}
};

二叉树(七):二叉树的高度与平衡二叉树相关推荐

  1. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

    文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...

  2. 数据结构知识点总结-树、二叉树、二叉树遍历、满二叉树、完全二叉树、查找二叉树、平衡二叉树、红黑树、B树、B+树

    树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系的集合.把它叫做 ...

  3. c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...

    第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...

  4. 二叉树的基本特性和二叉树的几种基本操作的机制_深入理解二叉树01 二叉树基础

    数据结构是所有的程序员就业过程中无法回避的知识,最近在回顾数据结构的内容,因此会不定期的推出一些数据结构的文章,分享自己的笔记. 树是数据结构中的重点,由于二叉树又是树中的重中之重.二叉树的应用也非常 ...

  5. java已知一个二叉树_#二叉树复习#

    #二叉树复习# 目录 满二叉树 完全二叉树 平衡二叉树 二叉树的主要性质 --二叉树的度 --二叉树的深度计算 二叉树的遍历 其他 符号变量     结点总数     深度     度为0的结点数/叶 ...

  6. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

  7. 二叉树之二叉树的深度

    1.二叉树的max deep 1. 高度与深度 二叉树的高度: 任意一个节点到叶节点的max距离 深度: 任意一个节点到根节点的max距离 求深度: 后续 left right mid 先求子节点的深 ...

  8. 再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)

    树的概念 树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点 ...

  9. 二叉树-满二叉树、完全二叉树

    二叉树-满二叉树.完全二叉树 满二叉树 一棵高度为h,并且含有 2 h − 1 2^{h}-1 2h−1个结点的二叉树称为满二叉树,即树中的每一层都含有最多的结点.满二叉树的叶子节点都集中在二叉树的最 ...

最新文章

  1. java配置mq环境变量_RocketMQ学习-01安装及环境配置
  2. 详解COOKIE和SESSION关系和区别
  3. Windows7 连接Windows Server服务器时提示:计算机无法连接到远程计算机上的另一个控制台会话。...
  4. [轉]JavaScript获取HTML DOM父,子,临近节点
  5. 通俗解释优化的线性感知机算法:Pocket PLA
  6. 51NOD 1424 零树
  7. 1005:I Think I Need a Houseboat-poj
  8. 分布式消息中间件rocketmq的原理与实践
  9. 第二章:在HTML中使用JavaScript
  10. Kibana将语言设置为中文
  11. openproj ubuntu安装及其输入中文变方块乱码解决
  12. 基于Android Studio和Gradle 的小米便签配置和安装
  13. 山海演武传·黄道·第一卷 雏龙惊蛰 第四章 异兽
  14. modelica学习
  15. 本地计算机无法启动ansys,Ansys帮助文件无法打开的解决方法 | 坐倚北风
  16. 大数据平台的SQL查询引擎有哪些
  17. bitwise和shift arithmetic
  18. 将win7 firefox WebStorm PyCharm等JetBrains系列开发软件设置为豆沙绿护眼背景
  19. mysql score表_MySQL连表查询练习题
  20. 在一家虚拟现实公司工作是什么感受?

热门文章

  1. 计算机科学 核心课程,计算机科学与技术的核心课程是什么?
  2. python发红包程序解析-微信红包python实现
  3. 《驱动力》读后感_20170106
  4. bilibili获取cookie
  5. DESeq2,EdgeR,limma对比
  6. WKWebView 点击无反应
  7. 苹果手机左上角的数字怎么弄_这些iPhone自带软件,学会一个少装十几个APP,16G手机也够用...
  8. 园区智慧能源解决方案
  9. android 三段式加密,国密算法技术安全芯:海信推出全新金盾手机,7月7日预约...
  10. 2020年精彩文章回顾,都发布了哪些文章呢?