理论基础 —— 二叉树

【二叉树的定义】

二叉树( binary tree)是 n 个结点的有限集合,该集合或为空集(空二叉树),或由一个根结点与两棵互不相交的,称为根结点的左子树右子树的二叉树构成。

二叉树的特点是:

  • 每个结点最多有两棵子树,故二叉树中不存在度大于 2 的结点
  • 二叉树是有序的,其次序不能任意颠倒,即使树中的某个结点只有一棵子树,也要区分它是左子树还是右子树

二叉树具有以下 5 种基本形态:

【特殊的二叉树】

在实际应用中,常会用到以下几种特殊的二叉树。

1.斜树

所有的结点都只有左子树的二叉树称为左斜树,所有的结点都只有右子树的二叉树称为右斜树

在斜树中,每层只有一个结点,因此斜树的结点个数与其深度相同

2.满二叉树

在一棵二叉树中,若所有的分支结点都存在左子树和右子树,且所有的叶子都在同一层上,则称为满二叉树

其特点是:

  • 叶子只能出现在最下一层
  • 只有度为 0、度为 2 的结点

由于满二叉树的特性可知:满二叉树在同样深度的二叉树中结点个数、叶结点个数最多。

3.完全二叉树

对一棵具 n 个结点的二叉树按层序编号,若编号为 i 的结点与同样深度的满二叉树中编号 i 的结点在二叉树中的位置完全相同,则称为完全二叉树,那么显然有:满二叉树是完全二叉树

其特点是:

  • 叶结点只能出现在最下两层,且最下层的叶结点都集中在二叉树左侧连续的位置
  • 若有度为 1 的结点,只可能有一个,且其只有左孩子
  • 深度为 k 的完全二叉树在 k -1 层上行一定是满二叉树

简单来说,在满二叉树中,从最后一个结点开始,连续去掉任意个的结点,即是一棵完全二叉树

【二叉树的性质】

1.二叉树的第 i 层上行最多有 2^{i-1}(i\geqslant 1) 个结点

2.在一棵深度为 k 的二叉树中,最多有 2^{k}-1 个结点,最少有 k 个结点

推论:深度为 k 且具 2^{k}-1 个结点的二叉树一定是满二叉树,但深度为 k 具有 k 个结点的二叉树不一定是斜树

3.具有 n 个结点的二叉树,其分支数:B=n-1,对于任意一个结点,每度贡献一个分支,即:度为 0 的结点贡献 0 个分支,度为 1 的结点贡献 1 个分支,度为 2 的结点贡献 2 个分支。

4.在一棵二叉树中,若叶结点个数为 n_0,度为 2 结点个数为 n_2,那么有:n_0=n_2+1

5.具有 n 个结点的完全二叉树的深度为 \left \lfloor log_2\:n \right \rfloor +1

6.对一棵具有 n 个结点的完全二叉树,从 1 开始按层序编号,则对于任意编号 i 的结点,有:

  • 若 i=1,则:结点 i 为根节点;若 i>1,则:结点 i 的父结点编号为 \left \lfloor \frac{i}{2} \right \rfloor
  • 若 2i<=n,则:结点 i 的左孩子编号为 2i;若 2i>n,则结点 i 无左孩子
  • 若 2i+1<=n,则:结点 i 的右孩子编号为 2i+1;若 2i+1>n,则结点 i 无右孩子

【二叉树的遍历】

二叉树中最基本的操作是遍历。

二叉树的遍历是从根节点出发,按照某种次序访问二叉树中的所有结点,使得每个结点仅被访问一次。

根据二叉树的定义可知:一棵二叉树由根节点、根节点的左子树、根节点的右子树三部分构成,因此只要递归的遍历这三部分即可遍历整棵树。

二叉树的遍历通常分为四种方式:

  • 前序遍历:先访问根结点,再前序遍历根节点的左子树,然后再前序遍历根节点的右子树(根左右)
  • 中序遍历:先中序遍历根结点的左子树,再访问根节点,然后再中序遍历根结点的右子树(左根右)
  • 后序遍历:先后序遍历根结点的左子树,再后序遍历根结点的右子树,然后再访问根结点(左右根)
  • 层次遍历:从根节点开始,按层次从小到大逐个访问,同一层次按照从左到右的次序

二叉树遍历的性质:

  • 已知前序遍历序列和中序遍历序列,可以确定唯一的一棵二叉树
  • 已知后序遍历序列和中序遍历序列,可以确定唯一的一棵二叉树

【二叉树的存储结构】

二叉树的存储结构分为:顺序存储结构、二叉链表、三叉链表、线索链表等,其各有优劣,在应用时应根据实际情况灵活使用。

【树、森林、二叉树的转换】

从树的孩子兄弟表示法和二叉树的二叉链表表示法可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,因此,从物理结构上来看,两者是相同的,只是解释不同。

因此,以二叉链表为媒介,可导出树与二叉树间的对应关系,也就是说,给出一棵树,可以找到一棵唯一的二叉树与之对应,这样一来,对树的操作即可借助二叉树的存储,利用二叉树上的操作实现。

具体内容:点击这里

【哈夫曼树及哈夫曼编码】

哈夫曼树(Huffman Tree)又称最优二叉树,而哈夫曼编码(Huffman Coding)又称最优编码,是一种编码方式,属于可变字长编码(VLC)一种,其根据字符出现的概率来构造异字头的平均长度最短的码字。

哈夫曼树与哈夫曼编码是二叉树的经典应用,在实际中有着广泛的应用。

具体内容:点击这里

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值