数据结构第五章小结

  第五章学习的是树和二叉树。首先是树的定义,树是n个结点的有限集。非空树有且只有一个根,其余结点分为多个各不相交的有限集合。接下来是树的基本术语,结点,结点的度(结点拥有的子树数),树的度(树内各结点度的最大值),叶子又称终端结点是度为零的结点,兄弟,祖先,子孙,树的深度(树中结点的最大层次)。接下来是二叉树的定义,二叉树是树的一种,只不过二叉树是除了根以外,其余结点最多有两个分支,就是不相交的子集,称为左右子树且有左右之分。二叉树有五种形态。空二叉树,仅有根节点的二叉树,右子树为空的二叉树,左子树为空的二叉树,左右皆非空的二叉树。接下来是二叉树的性质。二叉树有三个性质。要记住二叉树的性质并且理解,因为会有题目的考察。比如给你一棵树,已知树的度和每个度的数量,求树的叶子结点。这样就要用到性质3,首先求出分支的数量,然后结点数分支数+1,进而求出叶子结点数即度为0的数。满二叉树和完全二叉树。满二叉树是每一层上的结点是都是最大结点数,完全二叉树最后一层可以有不是两个叶子,在那之后就没有叶子。要记住完全二叉树的两个性质。已知完全二叉树的结点,可以知道它的深度是[log2n]+1,若i是二叉树的根,根据2i>n,可以判断i无左孩子,2i+1>n,i无右孩子。接下来是二叉树的存储结构,顺序存储结构也就是用数组来存储,存储在相应的下标里面。如果对应下标的值不存在就用0来存储。但是这种存储结构只是适合于完全二叉树,因为其他的二叉树的结点数可能没有那么多,这就造成了空间的浪费。所以,对于一般的二叉树,可以用链式存储结构,用一个结构体存储它的结点数据,以及结构体指针定义的左右孩子,是一个二叉链表。遍历二叉树,实际上就是一个递归的过程,因为每一个结点都可能有两棵子树。二叉树的遍历有先序遍历,中序遍历,后续遍历,这些遍历是以根结点被获取的先后,以及层次遍历。先序遍历先遍历根结点再遍历左子树,再是右子树。其他的以此类推。层次遍历运用到了sql的队列,因为是按每一层每一层的进去,出来。所以用到了辅助队列。要了解遍历的本质,题目也会给出先序序列中序序列,让我们画出整棵树的问题。接下来是树的存储结构,双亲表示法,孩子表示法,带双亲的孩子表示法,以及孩子兄弟表示法。我觉得这几个表示法,主要是要看你需要什么,就把它定义在结点的结构体里面,然后再用数组和根结点打包,如果确定了根结点是1下标的话,就不需要了。比如说双亲表示法,就是把自己的data以及双亲的位置放在里面。不过在定义数组的时候,可以用动态的存储,这样在很多很多很大很大的数据里面就不会爆炸。接下来是哈夫曼树。哈夫曼树是最优树。我们要能够根据给定的权值,选定权值最小的两个结点作为左右子树构造一棵新的二叉树,然后两者之和到得新的权值,一直到只剩一个结点结束。了解哈夫曼树与不是哈夫曼树的最优树,最优的非哈夫曼树--不是运用哈夫曼算法的出的wpl相同的树,交换哈夫曼树相同层次的叶子结点。

  这次小组作业,感觉自己拖后腿了!因为自己没有深刻的理解到层次遍历的算法以及没有很好很好的理解题目,有点跑偏了!!总是想着孩子兄弟孩子兄弟,其实弄的复杂了。现在才想清楚,只要层次遍 历依次入队,头结点入队,左孩子入队,右孩子入队,左孩子当作头结点入队,这样循环下去。最后一个出队的就是最深的叶子结点。与实践1的层次遍历求叶子结点是类似的,只是比它更简单,不需要判断是不是叶子结点并输出。然后感觉自己心态也有问题,就是没有特别冷静的去思考。希望下去再继续把自己这章的内容不足的补充,做得更好吧!!

posted @ 2020-05-31 21:29  彭珊珊  阅读(137)  评论(0编辑  收藏  举报