数据结构知识点总结之树
数据结构
树
概念
-
结点的度
- 结点的子树数目
-
所有结点的度的总和
- 即边的数目:m=n-1
-
树的度
- 树所有结点中的最大度为树的度
-
树深度/高度
- 树中结点的最大层次
二叉树
-
定义
-
二叉树是度为2的有序树
-
节点n
- 高度h
-
-
性质
- \(h\le n \le 2^h-1\)
- \(log_2(n+1)\le h\le n\)
- \(n_2=n_0-1\)
-
特殊二叉树
-
满二叉树
- 结点数\(2^h-1\)
- 从上到下从左到右标序
-
完全二叉树
-
满二叉树缺失一部分,但是节点序号不变
-
非根结点(i>1)
-
父节点
- i/2
-
儿子节点
-
左孩子
- 2i
-
右孩子
- 2i+1
-
-
-
-
斜二叉树
-
-
存储结构
-
顺序二叉树
- 一般二叉树->完全二叉树
- 空间浪费
-
链式二叉树
-
结构
-
二叉链表
- LeftChild|data|RightChild
-
三叉链表
- LeftChild|data|Parent|RightChild
-
-
-
-
遍历二叉树
-
前序遍历
-
中序遍历
-
后序遍历
-
层序遍历
- 队列实现
-
-
线索二叉树
-
线索化
- 以某种方式遍历并使其成为线索二叉树
- 利用空指针域作为前驱后继
-
目的
- 加快查找结点的前驱后继
-
原理
-
二叉树指针域:2n个
-
非空指针域:n-1
-
空指针域:n+1
-
左空指针域
- 记录结点前驱
-
右空指针域
- 记录结点后继
-
-
-
-
应用
-
堆
-
特性
-
结构性
- 用数组表示的完全二叉树
-
有序性
- 任意结点的关键字是其子树结点的最大值
-
-
分类
- 最大堆
- 最小堆
-
操作
-
-
哈夫曼树
-
概念
- 带权路径长度\(WPL=\sum_{k=1}^n{W_k*L_k}\)
-
构造
- 按权值排序形成最小堆
- 取权值最小的两个结点作为树的叶子结点
- 求根结点的权值(叶子结点权值之和),加入最小堆中
-
应用
-
编码
- 权重为每个字符出现的概率
- 哈夫曼树左右分支为0,1
- 根据根到结点的路径编码
-
译码
- 根据编码搜索哈夫曼树
- 找到叶子结点即译码
-
-
-
一般树
-
存储结构
-
双亲表示法
- 数组:data|parent
-
孩子表示法
- 数组:data|child
-
双亲孩子表示法
-
数组+链表
- data|parent|*children
-
-
长子兄弟表示法
- 链表:firstchild|data|nextsibling
-
-
树、森林、二叉树的转换
-
树转二叉树
- 长子-兄弟法
-
森林转二叉树
- 先每棵树转二叉树
- 从第二棵树开始,依次把当前二叉树根结点的右子树
-
二叉树转森林
- 将二叉树根节点的右子树依次分裂
-
-
树的遍历
- 先根遍历
- 后根遍历
- 层次遍历
-
森林的遍历
- 先根遍历
- 中根遍历
- 后根遍历
- 层次遍历