初学数据结构---树和二叉树

来源:互联网 发布:hp1536 无线连接网络 编辑:程序博客网 时间:2024/06/14 09:58

一、树

1、树的定义和相关术语

(1)结点的度和树的度

(2)叶子结点和分支结点 

(3)孩子结点、双亲结点、兄弟

(4)祖先和子孙

(5)结点的层数和树的深度

(6)有序树和无序树

(7)有向树

(8)森林

(9)路径,路径长度,树的路径长度,结点的带权路径长度及树的带权路径长度

2、树的存储结构

(1)双亲表示法

(2)孩子表示法

(3)孩子兄弟表示法

二、二叉树

1、二叉树的定义

每个结点至多有2棵子树,且二叉树的子树有左右之分,次序不能任意颠倒。

2、二叉树的性质

(1)一棵非空二叉树的第I层上最多有2^(i-1)个结点

(2)深度为k的二叉树至多有2^k-1个结点

(3)对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2+1。

3、完全二叉树的性质

特点 :

叶子结点只可能在层次最大的两层上。

对任一结点,若其右孩子下的子孙最大层次为L,则其左孩子下的子孙的最大层次为L+1;

如果一棵完全二叉树的某个结点没有左孩子,则它必定没有右孩子。

性质:

具有n个结点的完全二叉树深度为lb(n)+1.

4、二叉树的存储结构

(1)顺序存储结构:

(2)炼式存储结构:


三、遍历 二叉树

(1)先序遍历:

(2)后序遍历:

(3)中序遍历:

(4)层次遍历:

四、表达式树及其构造

波兰式及逆波兰式

五、线索二叉树

定义:  如果二叉树左链域为空,则指向它的前驱,右链域为空,则指向它的后继。

1、二叉树的线索化:在遍历过程中修改空指针域的过程。

(1)空结点为树根,则表示为空树

(2)空结点为中序遍历的第一个结点的左孩子,空操作表示中序序列第一个结点的前驱为空。

(3)空结点为中序遍历的最后结点的右孩子,空操作表示中序遍历最后一个结点的后继为空。

(4)空结点为中序序列中间的某一结点的左孩子,空操作后及返回递归的上一层,在这层的后续操作中,将对该中间结点进行指针域的修改,使之能正确指向 其子树,前驱或后继。

六、树和森林与二叉树

树转化为二叉树:左孩子,右兄弟。

森林转化二叉树:左孩子,右兄弟。

二叉树还原森林:将右链砍断,就可以分割出若干个二叉树,对每棵二叉树砍断右链并与双亲链接。

遍历:树的先序遍历=二叉树先序遍历;树的后序遍历=二叉树中序遍历

    森林先序遍历=二叉树先序遍历;森林中序遍历=二叉树中序遍历

七、哈夫曼树及其应用

哈夫曼树:最优二叉树:

(1)根据给定n个权值构成的n棵二叉树的集合F,其中没课二叉树T中只有一个带权为w的根结点,其左右子树均为空。

(2)在F中选取两颗根结点权值最小的树作为左右子树来构造一颗新的二叉树,且置新的根结点为左右孩子权值之和。

(3)在F中删除这两棵树并将新的树加入到F中。

(4)重复步骤(2)和(3),直到F只有一颗树为止。

应用:哈夫曼编码。

构造哈夫曼树;左拐为0,右闪为1;编码即可。

原创粉丝点击