树结构简述

树的度

描述:树的节点包含一个数据元素以及指向其子树的分支。

  • 结点的度:结点拥有的子树数称为结点的度。
    • 度为0,称为叶结点或终端结点;
    • 度不为0,称为非终端结点或分支结点;
  • 树的度:树内各结点的度的最大值;

树的层次

从根开始,根为第一层,根的孩子为第二层,依此类推。
树的深度或高度:树中结点的最大层次;

有序树

树中各结点的子树看成从左到右有次序,不能互换的,称为有序树,否则称为无序树

树的存储结构

  1. 双亲表示法(顺序存储)
    • (1)每个结点元素包含数据域以及双亲指针域。如果需要找到该结点的双亲结点,只需要通过O(1)的时间,如果要知道结点的孩子是什么,需要遍历整个结构
    • (2)在(1)的基础上,做调整。指针域加多一个字段,指向结点的第一个孩子(最左边孩子,也称为长子域)
    • (3)…
  2. 孩子表示法(链式存储)
    多重链表法:每个结点有多个指针域,每个指针指向一颗子树的根节点
    • 每个结点指针域的个数等于树的度,导致空间浪费
    • 每个结点指针域的个数等于结点的度,维护运算难度加大
      孩子表示法:所有结点存进一个一维数组中,孩子结点以单链表作存储。其中一维数组结点包括数据域以及一个指针域,指针域指向最左孩子结点。单链表中的孩子结点,包括两个指针域,其中一个指针域指向一维数组下标,另一指针指向下一个兄弟。
      双亲孩子表示法
  3. 孩子兄弟表示法
    • 第一版:使用链表,每个结点包括三部分,数据域以及两个指针域,其中两个指针域分别指向该结点第一个孩子以及右兄弟,该版缺陷在于找双亲
    • 第二版:每个结点添加多一个指针域,指向其双亲

二叉树

  • 二叉树特点:
    • 结点最多有两棵子树
    • 左子树和右子树有顺序
    • 即使结点只有一棵子树也要区分是左子树还是右子树
  • 二叉树基本形态:
    • 空二叉树
    • 只有一个根节点
    • 根节点只有左子树
    • 根节点只有右子树
    • 根节点既有左子树又有右子树
  • 特殊二叉树:
    • 斜树
      • 每层只有一个结点
      • 结点的个数与二叉树的深度相同
    • 满二叉树
      • 所有分支结点都存在左右子树
      • 所有叶子结点都在同一层
    • 完全二叉树
      概念:对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则这棵二叉树称为完全二叉树
    • 二叉搜索树
      • 左子树上的数据域均小于或等于根节点
      • 右子树上的数据域均大于或等于根节点
    • 平衡二叉树(avl树)
      • 左子树与右子树的高度差的绝对值不超过1

二叉树性质

  • 在二叉树的第i层上至多有2^(i-1)个结点(i>=1)
  • 深度为k的二叉树至多有2^k-1
  • 终端结点数为n0,度为2的结点数为n2,则n0=n2+1
  • 具有n个结点的完全二叉树深度为(log2n往下取整)+1
  • 对一棵n个结点的完全二叉树编号,对任一结点i有
    • 如果i=1,则结点i是二叉树的根,无双亲;i>1,双亲是(i/2向下取整)
    • 如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是2i
    • 如果2i+1>n,则结点i无右孩子;否则右孩子是结点2i+1

二叉树存储结构

  • 顺序存储,只适用于完全二叉树。其他树使用顺序存储会造成存储空间的浪费
  • 二叉链表,每个结点有一个数据域以及两个指针域,两个指针域分别指向左右子树(如有需要可加多一个指针域指向其双亲,称为三叉链表)

遍历二叉树

  • 前序遍历,根左右
  • 中序遍历,左根右
  • 后序遍历,左右根
  • 层序遍历,从左到右逐层访问

基于二叉树的延伸

节点的阶:一个节点的子节点数目的最大值,用m表示
B树,B+树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值