http://student.zjzk.cn/course_ware/data_structure/web/shu/shu6.1.1.1.htm
1. 概念:树是一种重要的非线性的、具有层次关系的结构。
2. 树的递归定义:
树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个:
a) 有且仅有一个特定的称为根(Root)的结点;
b) 其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。
1. 概念:
A. 二叉树中,每个节点最多只有两个课子树,并且有左右之分;
B. 不是树的特殊情形,是不同的数据结构
2. 性质:
A. 二叉树第i层的节点书目最多为2i-1 (i≥1)
B. 深度为k的二叉树至多有2k–1 (i≥1)
C. 若终端节点的个数为n0,度为2的节点为n2个,则有n0 = n2 + 1
1) n = n0 + n1 + n2
2) n = n1 + 2*n2 + 1
3. 特殊形式:
A. 满二叉树:一颗深度为k且有2k–1个结点
1) 没有度为1的节点,每一层都是最大的节点数
2) 叶子节点都在最下一层
B. 完全二叉树:
1) 叶子所在的层数相差最大为1;叶子都集中靠在左边
2) 具有n个结点完全二叉树的深度为
3) 满二叉树 肯定 是完全二叉树; 完全不一定二叉
4. 顺序存储:
A. 完全二叉树结点编号:假设编号为i的节点是Ki (1≤i≤n)
1) 若i>1,则其双亲编号为
2) 若2*i≤ n,则Ki的左孩子编号为 2*i; 否则Ki肯定是叶子结点,因此可知编号 的节点必定是叶子节点。
3) 若2*i+ 1 ≤ n,则Ki的右孩子编号为 2*i + 1;否则没有右孩子
4) 若i为奇数且不为1, 则Ki的左兄弟为i - 1;否则Ki无左兄弟。
5) 若i为偶数且不为n,则Ki的右兄弟为 i + 1;否则Ki无右兄弟
B. 一般的二叉树顺序存储:
1) 添加虚节点构成完全二叉树(符号)
2) 一般二叉树用顺序存储,易造成空间浪费
3) 在删除时,需要移动大量的结点。
5. 遍历
A. 三种方法
1) 中序遍历(L N R)
2) 先序遍历(N L R)
3) 后序遍历(L R N)
B.
6. 线索二叉树
A. “线索”是遍历服务的,在遍历时,其每个节点的上一个遍历点和下一个遍历点分别叫做:前驱和后继,其计算是比较耗时的。因此,在节点中加入了线索域:
7. 树、森林与二叉树的转换
A. 二叉树 与 树和森林之间是一一对应的。
B. 树 转换 二叉树
1) 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟
a) 在所有兄弟节点间加一条连线
b) 对每个结点,保留与其长子的连线,删掉其他孩子的连线
2) 由于树根没有兄弟,故树转化为二叉树后,二叉树的根结点的右子树必为空。
C. 森林 到 二叉树
1) 将森林中的每棵树变为二叉树
2) 因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。
D. 二叉树到树、森林
1) 若结点x是双亲y的左孩子,则把x的右孩子,右孩子的右孩子,…,都与y用连线连起来,最后去掉所有双亲到右孩子的连线。
8. 最优二叉树
A. 树的路径长度
1) 从树根到每个结点的路径长度之和。在节点数相同的二叉树中,完全二叉树的路径长度最短。
2) 加权路径长度 = 树的代价:所有叶子结点(的权重)于路径
B. 最优二叉树或哈夫曼树
1) 在权为w1,w2,..,wn的n个叶子构成的二叉树中,其带权路径最小的二叉树称之为最优二叉树或这哈夫曼数。
2) 叶子权重相同时,完全二叉树就是最优二叉树
3) 在最优二叉树中,权重越大,叶子节点离根越远。
4) 构造最优二叉树的算法 – 哈夫曼 算法
C. 哈夫曼算法
1) 通过频率,构造哈夫曼树
http://blog.csdn.net/v_JULY_v/article/details/6530142
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html