1.基本概念

【软考】【数据结构】树与二叉树
  结点:1,2,3,4,5,6,7,8都叫做结点
  结点的度:结点孩子结点的个数,结点1的度为2,结点3的度为1,结点7的度为0
  数的度:节点的最高度数为数的度
  叶子结点:结点的度为0的结点,4,5,7,8
  分支结点:非根节点并且存在分支的结点,2,3,6
  内部结点:非根节点并且非叶子结点的结点,2,3,6
  父节点、子节点:2是4的父结点,4是2的子结点
  兄弟结点:4是5的兄弟结点
  层次:如图中的1层,2层,3层,4层

2.二叉树

满二叉树:没有缺失的结点,节点的度要么为2要么为0
  完全二叉树:除去最底层后,是一个满二叉树,并且最底层的结点要全部在左侧,不能在右侧
【软考】【数据结构】树与二叉树
【软考】【数据结构】树与二叉树
 二叉树的特性:
1.二叉树的第i层上最多有2^(i-1)个结点
2.深度为k的二叉树最多有2^k - 1 个结点
3.如果二叉树的叶子结点数为n0,度为2的结点数为n2,则n0 = n2 + 1
4.如果对一个完全二叉树按层次编号,则对任一结点i
如果i = 1,则结点i无父节点,若i > 1,则父节点是 i/2
如果2i > n,则结点i为叶子结点,无左子结点,否则,其左子结点为2i
如果2i+1 > n,则结点i无右子结点,否则其右子结点为2i + 1

2.1 二叉树的存储结构

顺序存储

用一组地址连续的存储单元存储二叉树中的结点,必须把结点排成一个适当的线性序列,并且结点在这个序列中的相互位置能反应出结点之间的逻辑关系。
对于下标为i的结点,其左孩子下标为2i,右孩子下标为2i+1
非完全二叉树不宜采用这种存储结构,应为会造成存储空间的浪费
【软考】【数据结构】树与二叉树

链表

二叉链表存储:左孩子,结点数据,右孩子
三叉链表存储:左孩子,父节点,结点数据,右孩子
【软考】【数据结构】树与二叉树
下图为一个二叉树采取三叉链表存储时浪费的空指针的数量
【软考】【数据结构】树与二叉树

2.2 二叉树遍历

【软考】【数据结构】树与二叉树
  **层次遍历:**逐层按照从左到右的顺序进行遍历,结果为1,2,3,4,5,6,7,8
  **前序遍历:**根左右,结果为1,2,4,5,7,8,3,6
  **中序遍历:**左根右,结果为4,2,7,8,5,1,3,6
  **后序遍历:**左右根,结果为4,8,7,5,2,6,3,1
  已知前序和后续,无法得到中序

2.3 反向构造二叉树

由前序序列为ABHFDECG,中序序列为HBEDFAGC构造二叉树
【软考】【数据结构】树与二叉树

2.4 数转二叉树

孩子结点----左子树结点
  兄弟结点----右子树结点
【软考】【数据结构】树与二叉树
  连线法:兄弟结点连起来,多孩子只保留左边的孩子

3.查找二叉树

二叉排序树:左孩子小于根,右孩子大于根,可以极大提高查询的速度和效率
【软考】【数据结构】树与二叉树
  插入结点:①若该键值已经存在,则不再插入,如48。②若查找二叉树为空数,则以新结点为查找二叉树。③将要超如结点键值与插入后父结点键值比较,就能确定新结点是父结点的左子结点还是右子结点。
  删除结点:①待删除的结点是叶子节点,则直接删除。②若待删除结点只有一个子节点,则将这个子节点与待删除结点的父节点直接连接,如删除56,则直接将48与51相连。③若待删除结点p有两个子结点,则在其左子树上用中序遍历寻找关键值最大的结点S,用S的值代替结点P的值,然后删除结点S,结点S必须属于上述①②情况之一,如删除89,则在左子树中寻找键值最大的,即56,用56替代89,然后删除56。

4.最优二叉树

又称为哈夫曼树,主要用于哈夫曼编码。哈夫曼编码是一种压缩编码方式,在多媒体的压缩技术中经常用到,属于无损压缩。
【软考】【数据结构】树与二叉树
  基本概念:
  树的路径长度:树种的路径累加起来有多长(连接线的个数)
  权:某叶子结点表示某字符出现的频率
  子结点的带权路径长度:路径长度 * 权值,如到④号结点的带权路径长度为4 * 3
  树的带权路径长度:每个子节点的带权路径长度之和
  哈夫曼树:使树的带权路径长度最短的树,如树1的带权路径长度为41,树2的带权路径长度为25
  **例:**假设有一组权值:5,29,7,8,14,23,3,11,尝试构造哈夫曼树
每两个最小值组成树,划去使用过的权值并添加使用过的权值之和
①权值3和5构成子树,划去3和5并添加权值8,新权值29,23,14,11,8,8,7
②权值7和8(相同时取任意一个即可)构成子树,划去7和8并添加权值15,新权值29,23,15,14,11,8
③权值8和11构成子树,划去8和11并添加权值19,新权值29,23,19,15,14
④权值14和15构成子树,划去14和15并添加权值29,新权值29,29,23,19
⑤权值19和23构成子树,划去19和23并添加权值42,新权值42,29,29
⑥权值29和29构成子树,划去29和29并添加权值58,新权值58,42
⑦权值58和42构成子树,划去58和42并添加权值100
【软考】【数据结构】树与二叉树

5.线索二叉树

【软考】【数据结构】树与二叉树
  在二叉树的基础上,用箭头连接起来各个结点。在二叉树的结点有很多指针处于空闲状态,将这些空闲的资源利用起来,方便遍历,提出了线索二叉树。
如图所示的二叉树的前序遍历:ABDEHCFGI
#6.平衡二叉树#
  同一数列的排序二叉树可以有多个,如对数列{1,5,7,9,8,39,73,88}构造排序二叉树有以下几个,但右边的排序二叉树在查找时效率更高,所以引入平衡二叉树。
【软考】【数据结构】树与二叉树
  对于一个排序二叉树,任意结点的左右子树深度相差不超过1,每个结点的平衡度只能为-1、 0或1

相关文章: