欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构--知识点总结--树

程序员文章站 2022-05-26 12:02:13
...

1.树

1.1 基本概念

数据结构--知识点总结--树

  • 结点:如上图,49,38,76等都是结点。注:结点不仅包含数据元素,还包含指向子树的分支。如:49结点不仅包含数据元素49,而且还包含2个指向子树的指针。
  • 结点的度:结点拥有的子树个数或者分支个数
  • 树的度:树中各结点度的最大值。

1.2 树的性质

非空树中结点总数N = 1 + 分支数
分支数 = 树中各结点的度之和
例题:
数据结构--知识点总结--树

1.3 树的存储结构

  • 顺序存储结构:双亲存储结构,用一维数组即可实现,用数组下标表示树中的结点,数组元素的内容表示该结点的双亲结点。
  • 链式存储结构:包括孩子存储结构、孩子兄弟存储结构
    孩子存储结构,实质上就是图的邻接表存储结构

1.4 树的存储表示

数据结构--知识点总结--树

数据结构--知识点总结--树

数据结构--知识点总结--树

数据结构--知识点总结--树

数据结构--知识点总结--树
左子树为第一个子女,右子树为下一个兄弟
数据结构--知识点总结--树

2.二叉树

2.1 基本概念

满二叉树:
完全二叉树:

2.2 二叉树的性质

具有n个结点的完全二叉树的高度(或深度)为 取下整(log2n)+1,也可写为 取上整log2(n+1)

2.3 二叉树的存储结构

  • 顺序存储结构:最适用于存储完全二叉树。
  • 链式存储结构:一个数据域,两个指针域的链式结点结构。
typedef struct BTNode{
    int data;
    struct BTNode *lchild;
    struct BTNode *rchild;
}BTNode;

2.4 二叉树的存储表示

  • 二叉树的顺序表示
  • 二叉树的链式表示(二叉链表)
  • 三叉链表:增加一个指向双亲的指针parent(如下图)
    数据结构--知识点总结--树

2.5 二叉树遍历

  • 前序遍历
  • 中序遍历
  • 后序遍历

2.6 构造二叉树

使用二叉树前序遍历建立二叉树
数据结构--知识点总结--树

构造二叉树
数据结构--知识点总结--树

二叉树计数
数据结构--知识点总结--树

2.7 线索化二叉树

  • 线索化二叉树,又称穿线树,将某种遍历顺序下的前驱、后继关系记在树的存储结构中,可以高效地找出某结点的前驱、后继。
    数据结构--知识点总结--树
    数据结构--知识点总结--树
    数据结构--知识点总结--树

3.树与森林

3.1 树的遍历

数据结构--知识点总结--树
数据结构--知识点总结--树
数据结构--知识点总结--树
数据结构--知识点总结--树

3.2 森林与二叉树的转换

将一般树化为二叉树表示就是用树的子女-兄弟表示来存储树的结构。森林与二叉树表示的转换可以借助树的二叉树表示来实现。
数据结构--知识点总结--树

3.3 森林的遍历

森林的遍历也分为深度优先遍历和广度优先遍历,深度优先遍历又可分为先根次序遍历和后根次序遍历。

4.堆

数据结构--知识点总结--树

注:当调整完较高一层的顺序后要看低层的是否符合条件
数据结构--知识点总结--树

5.Huffman树

5.1 概述

  • 两个结点之间的路径长度 PL 是连接两结点的路径上的分支数。
  • 树的外部路径长度是各叶结点(外结点)到根结点的路径长度之和 EPL。
  • 树的内部路径长度是各非叶结点(内结点)到根结点的路径长度之和 IPL。
  • 树的路径长度 PL = EPL + IPL。
    数据结构--知识点总结--树

数据结构--知识点总结--树

  • 带权路径长度达到最小的扩充二叉树即为Huffman树。
  • 在Huffman树中,权值大的结点离根最近。

5.2 Huffman树的合并过程

数据结构--知识点总结--树
注意:画Huffman树时要细心,所有结点都要画上

5.3 Huffman树的存储

  • 可以采用静态链表方式存储Huffman树
    数据结构--知识点总结--树
    数据结构--知识点总结--树

5.4 最佳判定树

  • 利用Huffman树,可以在构造判定树(决策树)时让平均判定(比较)次数达到最小。
  • 判定树是一棵扩展二叉树,外结点是比较结果,内结点是比较过程,外结点所带权值是概率。

5.5 Huffman编码

数据结构--知识点总结--树

用途;实现数据压缩
数据结构--知识点总结--树