• (九)数据结构-二叉树


    一、二叉树的概念

    1.1二叉树的定义

    二叉树另一种树形结构,他的特点是每个节点只有两颗子树(即不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。

    1.2二叉树与度为2的有序树的区别

    1. 度为2的树至少有3个结点,而二叉树可以为空
    2. 度为2的有序树的孩子的左右次序是相对另一个孩子而言的
      若某个结点只有一个孩子,则这个孩子就无须区分左右次序
      而二叉树无论其孩子数是否为2都是需要确定其左右次序,即二叉树的左右次序不是相对另一结点而言,而是确定的

    1.3特殊的二叉树

    1.3.1满二叉树

    定义:一个高度为h,且含有2的h次方-1结点的二叉树,称为满二叉树
    性质:

    1. 树的每一层都含有最多的结点
    2. 满二叉树的叶子结点都集中在二叉树的最下一层
    3. 除叶子结点之外的每个节点度数均为2
    1.3.2完全二叉树

    定义:高度为h,有n个节点的二叉树,当且仅当其每个节点都与高度为h的满二叉树中的编号为1~n的结点一一对应时候,成为完全二叉树(在满二叉树的基础上去掉若干个编号更大的结点)
    在这里插入图片描述

    1.3.3二叉排序树

    左子树上所有结点的关键字均小于根结点的关键字,右子树上的所有节点的关键字均大于根结点的关键字,左子树和右子树又各是一颗二叉排序树
    在这里插入图片描述

    1.3.4平衡排序树

    树上任一结点的左子树和右子树的深度之差不超过1

    在这里插入图片描述

    二、二叉树的性质

    在这里插入图片描述

    性质1:前提:非空二叉树,叶子节点数等于度为2的结点数+1

    在这里插入图片描述

    性质2:前提:非空二叉树,第k层上至多又2的k次方-1个节点在这里插入图片描述

    性质3:高度为h的二叉树至多又2的h次方-1个节点(最多节点的情况刚好是一颗满二叉树)

    在这里插入图片描述

    性质4:具有n个(n>0)的结点的完全二叉树的高度

    在这里插入图片描述
    在这里插入图片描述

    性质五:对于完全二叉树,可以由结点数n推出度为0、1、2的结点数

    完全二叉树度为1的结点只能是0或1

    完全二叉树度为0➕度为2一定是奇数

    (因为度为0=度为2加1)
    (所以度为0+度为2 等于 2倍的度为2+1)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、二叉树的存储结构

    3.1顺序存储

    顺序存储:适合完全二叉树和满二叉树,树中结点序号可以唯一反应结点之间的逻辑关系,这样既能最大可能地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系

    最坏情况:一个高度为h且只有h个结点的单支树需要占据近2的h次方-1个存储单元

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.2链式存储

    由于顺序存储的空间利用率较低,因此二叉树一般采用链式存储结构,用链表结点来存储二叉树中的每个结点。
    在二叉树中,结点结构通常包括若干数据域和若干指针域
    (二叉链表至少包括3个域:左指针域、左指针域、数据域)

    在含有n个结点的二叉链表中,含有n+1空链域

    解释:一个二叉树有n个结点,总共有2n个指针域,
    除根结点以外,其它每一个结点头上都会有连有指针,所以有n-1个结点
    因此2n个指针域中会有n+1个指针是指向null的

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    小程序之mpvue使用
    VoLTE端到端业务详解 | 空口主要特性功能
    【Redis】链表和字典
    15链表-交换节点
    《深入理解BigDecimal:揭秘钱财计算的核心技术》
    Java根据线程指标自定义HPA(Prometheus为监控收集)
    C语言实现扫雷小游戏
    二叉搜索树
    可扩展易配置,快来揭秘新一代自监督学习开源框架
    【环境配置】使用Docker搭建LAMP环境
  • 原文地址:https://blog.csdn.net/weixin_45579930/article/details/125996332