树的笔记

1.树:是n个结点的有限集T,T为空时称空树,否则满足:
1)有且仅有一个特定的称为根的结点;
2)其余结点可分为m个互不相交的子集,每个子集本身是一棵树,并称为根的子树。
2.树的表示方法:1)树形表示法;2)嵌套集合表示法;3)凹入表表示法;4)广义表表示法;
3.一个结点拥有的子树数称为该结点的度;一棵树的度是指树中结点最大的度数。
4.度为零的结点称叶子或终端结点;度不为零的结点称分支结点或非终端结点
5.根结点称开始结点,根结点外的分支结点称内部结点;
6.树中某结点的子树根称该结点的孩子;该结点称为孩子的双亲;
7.树中存在一个结点序列K1,K2,…Kn,使Ki为Ki+1的双亲,则称该结点序列为K1到Kn的路径或道路;
8.树中结点K到Ks间存在一条路径,则称K是Ks的祖先,Ks是K的子孙;
9.结点的层数从根算起,若根的层数为1,则其余结点层数是其双亲结点层数加1;双亲在同一层的结点互为堂兄弟;树中结点最大层数称为树的高度或深度;
10.树中每个结点的各个子树从左到右有次序的称有序树,否则称无序树;
11.森林是m棵互不相交的树的集合。
  
12.二叉树:是n个结点的有限集,它或为空集,或由一个根结点及两棵互不相交的、分别称为该根的左子树和右子树的二叉树组成。
13.二叉树不是树的特殊情况,这是两种不同的数据结构;它与无序树和度为2的有序树不同。
14.二叉树的性质:
1) 二叉树第i层上的结点数最多为2^(i-1);
2) 深度为k的二叉树至多有2^k-1个结点;
3) 在任意二叉树中,叶子数为n0,度为2的结点数为n2,则n0=n2+1;
15.满二叉树是一棵深度为k的且有2^k-1个结点的二叉树;
16.完全二叉树是至多在最下两层上结点的度数可以小于2,并且最下层的结点集中在该层最左的位置的二叉树;
17.具有N个结点的完全二叉树的深度为log2N取整加1;
18.二叉树的存储结构
(1)顺序存储结构:把一棵有n个结点的完全二叉树,从树根起自上而下、从左到右对所有结点编号,然后依次存储在一个向量b[0~n]中,b[1~n]存放结点,b[0]存放结点总数。
各个结点编号间的关系:
1) i=1是根结点;i>1则双亲结点是i/2取整;
2) 左孩子是2i, 右孩子是2i+1;(要小于n)
3) i>(n/2取整)的结点是叶子;
4) 奇数没有右兄弟,左兄弟是i-1;
5) 偶数没有左兄弟,右兄弟是i+1;
(2)链式存储结构
结点的结构为:lchild|data|rchild ;相应的类型说明:
typedef char data;
typedef struct node{
 datatype data;
 structnode *lchild , *rchild;
}bintnode;
typedef bintnode * bintree;
19.在二叉树中所有类型为bintnode的结点和一个指向开始结点的bintree类型的头指针构成二叉树的链式存储结构称二叉链表。
20.二叉链表由根指针唯一确定。在n个结点的二叉链表中有2n个指针域,其中n+1个为空。
 
21.二叉树的遍历方式有:前序遍历、中序遍历、后序遍历。时间复杂度为O(n)。
22.线索二叉树:利用二叉链表中的n+1个空指针域存放指向某种遍历次序下的前趋和后继结点的指针,这种指针称线索。加线索的二叉链表称线索链表。相应二叉树称线索二叉树。
23.线索链表结点结构:lchild|ltag|data|rtag|rchild;ltag=0,lchild是指向左孩子的指针;ltag=1,lchild是指向前趋的线索;rtag=0,rchild是指向右孩子的指针;rtag=1,rchild是指向后继的线索;
24.查找*p在指定次序下的前趋和后继结点。算法的时间复杂度为O(h)。线索对查找前序前趋和后序后继帮助不大。
25.遍历线索二叉树。时间复杂度为O(n)。
 
26.树、森林与二叉树的转换
(1)树、森林与二叉树的转换
1)树与二叉树的转换:1}所有兄弟间连线;2}保留与长子的连线,去除其它连线。该二叉树的根结点的右子树必为空。
2)森林与二叉树的转换:1}将所有树转换成二叉树;2}将所有树根连线。
(2)二叉树与树、森林的转换。是以上的逆过程。
27.树的存储结构
(1)双亲链表表示法:为每个结点设置一个parent指针,就可唯一表示任何一棵树。Data|parent
(2)孩子链表表示法:为每个结点设置一个firstchild指针,指向孩子链表头指针,链表中存放孩子结点序号。Data|firstchild。
(3双亲孩子链表表示法:将以上方法结合。Data|parent|firstchild
(4)孩子兄弟链表表示法:附加两个指向左孩子和右兄弟的指针。Leftmostchild|data|rightsibling
28.树和森林的遍历:前序遍历一棵树等价于前序遍历对应二叉树;后序遍历等价于中序遍历对应二叉树。
 
29.最优二叉树(哈夫曼树):树的路径长度是从树根到每一结点的路径长度之和。将树中的结点赋予实数称为结点的权。
30.结点的带权路径是该结点的路径长度与权的乘积。树的带权路径长度又称树的代价,是所有叶子的带权路径长度之和。
31.带权路径长度最小的二叉树称最优二叉树(哈夫曼树)。
32.具有2n-1个结点其中有n个叶子,并且没有度为1的分支结点的树称为严格二叉树。
33.哈夫曼编码 
34.对字符集编码时,要求字符集中任一字符的编码都不是其它字符的编码前缀,这种编码称前缀码。
35.字符出现频度与码长乘积之和称文件总长;字符出现概率与码长乘积之和称平均码长;
36.使文件总长或平均码长最小的前缀码称最优前缀码
37.利用哈夫曼树求最优前缀码,左为0,右为1。编码平均码长最小;没有叶子是其它叶子的祖先,不可能出现重复前缀。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值