第五章学习小结
本章学习内容:二叉树,树,森林,哈夫曼树,并初步了解了图的相关性质。
二叉树:
1.二叉树的构建:二叉树的构建可选用两种数据结构:数组和链表
数组:讲二叉树补全为完全二叉树(空余的部分用空表示)。此方法虽然在插入和遍历时较为方便,但是多数情况下会浪费大量的空间。一般不采用。
链表:一个结点包括三个部分:结点本身的数据、指向左孩子的指针、指向右孩子的指针。若无孩子结点,则指针设为空。
2.二叉树的遍历:二叉树的遍历有三种方式:先序遍历,中序遍历,后序遍历。
树:树与二叉树有所不同。二叉树一个结点只能含有两个孩子结点,而树的结点可以含有任意个孩子节点。
森林:由若干个树组成
哈夫曼树:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
图:
图的构建:图的构建有三种方式:二维数组,一维数组,链表。
1.二维数组:二维数组是图最标准的结构。只需讲多个对象分别编号,即可用数组表示两地之间是否连接。如:若想知道 i 对象和 j 对象之间是否连接,只需查询a[i][j]的数据即可,一般来说,我们用0表示未连接,用1表示已连接。这种结构十分方便,但是存在着空间浪费的情况。如a[i][j]和a[j][i]均表示了 i 对象和 j 对象之间的连接情况,所以二维数组结构浪费了一半的存储空间。
2.一维数组:一维数组既满足了方便查询的特点,又避免了空间浪费。而如要查询 i 对象与 j 对象之间是否连接,只需查询a[i(i+1)/2+j]的数据即可。
3.链表:一般来说只有极为稀疏的图才会采用链表的存储结构。这种结构虽然可以节约空间,但是会使查询操作十分繁琐。