这一章学习了树的定义、二叉树的性质和存储结构、树和森林的转化、遍历等,以及哈夫曼树的概念和构造算法
首先是树的一些定义和性质,刚开始接触时还是比较懵的,对一些术语不太熟悉,对性质也不太理解,后面在几次计算题的运用过程中才逐渐掌握。
然后是树的存储结构
树的存储结构是建立在前几章的基础上的,有多种表示方法,非常灵活,可以根据不同的需要选择合适的结构
对于二叉树,要实现先序、中序、后序遍历,可以用二叉链表表示法
1 typedef struct bitnode//二叉链表 2 { 3 char data; 4 struct bitnode *left, *right; 5 }bitnode, *bitree;
在一些情况下,用顺序存储更加简便
1 typedef struct node 2 { 3 char data; 4 int lchild; 5 int rchild; 6 }node; 7 8 typedef struct 9 { 10 node data[10]; 11 int r; 12 }tree;
在其他特殊的树中,还可以使用数组和链表相结合的方式进行存储。
通过对树的学习,也更深入了解了递归的应用,在树的操作过程中很多重复操作都是要通过递归实现的,比如二叉链表的遍历
void inordertraverse(bitree t)//中序遍历 { if(t) { inordertraverse(t->left); cout<data; inordertraverse(t->right); } }
在pta的实践1中,通过树的层次遍历则更深入接触了队列的应用,对队列的操作有了进一步的认识
在做这周的pta作业实践1时做了很久没做出来,看了spoc里的教程才懂,学到了新的方法
这周的小组任务依然完成得不是很好,最开始出现了段错误卡了很久,问题是出在maxsize上,因为循环是从1开始不是从0开始,所以maxsize的值要+1,没注意到这个问题。此外,又再一次漏掉了释放内存,吸取这次的教训,以后写代码多注意内存的问题,避免再出现这种错误。