第五章学习小结

第五章 树和二叉树

一:树

定义:n个结点的有限集,可为空或非空

若树非空一定有且仅有一个根结点

树的度:结点度的最大值(结点的子树数为结点的度)

深度:最大层次数

森林:m课不相交树的集合

课本上关于树只说明了定义和一些术语,重点内容在于二叉树部分

二:二叉树

二叉树的性质:深度为k的二叉树最多有2^k-1个结点,若其终端结点数为n0,度为2的结点为n2,n0=n2+1(若没有度为1的结点,结点总数为n0+n2=2n2+1)

满二叉树:深度为k,结点数2^k-1

完全二叉树:每个结点都与深度为k的满二叉树一一对应,但可以不是满二叉树,最后一层可能不满

存储

1.顺序

用数组存储,将每个结点与完全二叉树的结点对照存储,不存在的结点存0

缺点在于如果度为1的结点过多,会有很多没必要存的0,存储空间会大大浪费

但优点在于很快就能找到根结点,知道编号很快就能找到该编号结点的双亲和孩子

2.链式

由数据域和指针域组成,指针域一般包括该结点的左右孩子,也可加上他的双亲

遍历

分为先序,中序,后序,层次,前三种思路相同,以先序为例,先输出当前结点,然后递归调用遍历函数,把左右孩子结点传入函数即可

层次遍历:从上到下,从左到右遍历,可以借助队列来实现,输出根结点后根结点出队,然后他的左右孩子依次入队,继续操作

线索二叉树:在指针域增加一个LTAG,一个RTAG,为0时代表child域指的是他们的孩子,tag为1代表lchild是该结点的前驱,rchild是该结点的后继

(只是了解,并没有实际应用过。。。)

哈夫曼树

又称最优树,给定权值,构造出的带权路径长度最小的二叉树

构造算法

结构体数组,先将所有结点child域和parent的值赋为0,前n个结点传入n个叶子结点的权值,从n+1开始,挑选两个权值最小的结点相加,为这个结点处的权值,再相应的改变child域和parent域的值

作业方面

注意new数组的时候不要用 =new bool [n]{false}的形式,可以改成 =new bool [n]();

posted @ 2020-05-31 16:55  宋沂澎  阅读(145)  评论(0编辑  收藏  举报