数据结构——二叉树

一 什么是树

1.1 定义

  1. 树是 n (n ≥ 0) 个结点的有限集。 n = 0 时称为空树。在任意一颗非空树中:有且仅有一个特定称为根的结点;当 n > 1 时, 其余结点可分为 m ( m > 0) 个互不相交的有限集 T1、 T2、······ 、Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

1.2 存储结构

1.2.1 双亲表示法

  1. 每个结点中,除了包含自身数据, 附加一个指示器指示其双亲到链表中的位置。

1.2.2 孩子表示法

  1. 每个结点中,除了包含自身数据, 附加n个指示器分别指示其 n 个子结点在链表中的位置。

1.2.3 孩子兄弟表示法

  1. 每个结点中,除了包含自身数据, 附加2个指示器分别指示其第一个孩子和右兄弟的位置。

二 二叉树

2.1 定义

  1. 二叉树是 n(n ≥ 0)个 结点的有限集合,该集合或者为空集, 或者由一个根节点和两颗互不相交的、分别称为根节点的左子树和右子树的二叉树组成。
  2. 结点拥有的子树的数量称为结点的度(Degree)。度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。树的度是各结点的度中的最大值。
  3. 结点的层级(Level)从根节点开始, 根节点为第 1 层,第 n 个结点在 第( log₂ n + 1) 层。树中结点的最大层级称为树的深度或高度(Depth)。

2.2 特殊二叉树

2.2.1 斜树

  1. 所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。

2.2.2 满二叉树

  1. 在一颗二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层,这样的二叉树称为满二叉树。

2.2.3 完全二叉树

  1. 对一个具有 n 个 结点 的二叉树按层序编号, 如果层序编号为i( 1 ≤ i ≤ n)的结点与同样深度的满二叉树中的层序编号为 i 的结点在二叉树中的位置完全相同, 则这颗二叉树称为完全二叉树。

2.3 遍历二叉树

2.3.1 前序遍历

  1. 规则是若二叉树为空,则返回空操作,否则先访问根节点,然后前序遍历左子树, 再前序遍历右子树。(ps: 根左右)
  2. 如下图所示,遍历的顺序是:ABDGHCEIF。
    在这里插入图片描述

2.3.2 中序遍历

  1. 规则是若二叉树为空,则返回空操作,否则从根节点开始(并不是访问根节点),中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。(ps: 左根右)
  2. 如下图所示,遍历的顺序是:GDHBAEICF。
    在这里插入图片描述

2.3.3 后序遍历

  1. 规则是若二叉树为空,则返回空操作,否则从左到右,先叶子后结点的方式, 先遍历左子树, 然后遍历右子树,最后访问根节点。(ps:左右根)
  2. 如下图所示, 遍历的顺序是:GHDBIEFCA。
    在这里插入图片描述

2.3.4 层序遍历

  1. 规则是若二叉树为空,则返回空操作,否则从树的第 1 层开始, 按照从上往下,从左到右的方式逐个访问结点。
  2. 如图所示:遍历顺序:ABCDEFGHI
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值