二叉树的存储表示,一般树和森林与二叉树的转换关系
1. 树的基本定义
- 树是由一个集合以及在该集合上定义的一宗关系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。
- 树的递归定义:假设树是n个结点的有限集。它:
1)或者是一颗空树(n=0),空树中不包含任何节点
2)或者是一颗非空树,有且只有一个根节点root,当n>1时,其余节点可分为m个互不相交的有限集T1,T2,…Tm
- ** 树的节点包含一个数据元素及若干指向其子树的若干分支 **节点的层次从根开始定义,层次为0的结点是根节点,其子树的根的层次数为1.若节点在L层,其子树的根就在L+1层。
- 树种节点最大层次数称为树的深度或高度。树种节点也有高度,其高度是以该节点为根的树的高度。
- 结点拥有的子树的数目称为结点的度
- 路径:树中k+1个结点通过k条边连接构成的序列
- 森林: 互不相交的树的集合
基本操作包括:getSize()、getRoot()、getParent(x) 、getFirstChild(x) 、getNextSibling(x)、getHeight(x)
2. 二叉树: 每个结点的度不超过2的有序树
3. 二叉树的性质:
(1)二叉树的第i层最多有2i个结点
(2)满二叉树&完全二叉树:
若在一棵满二叉树中,在最下层从最右侧起去掉相邻的若干叶子结点,得到的二叉树即为完全二叉树
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
4. 树、森林
树的存储结构主要有三种:双亲表示法,孩子链表示法,孩子兄弟表示法
分别举例
双亲表示法:结点指向父节点
孩子链表表示法:一个线性表存储树的所有结点信息,称为结点表。每个结点建立一个孩子表。
孩子表只存储孩子结点的地址。
孩子兄弟表示法:每个结点除了data外,还包含分别指向该节点第一个孩子和右邻兄弟的两个域
5. Huffman树