20172318 2018-2019-1 《程序设计与数据结构》第7周学习总结
20172318 2018-2019-1 《程序设计与数据结构》第7周学习总结
教材学习内容总结
二叉查找树
- binarysearchtree: 二叉查找树 二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,而父结点又小于或等于右孩子
- 二叉查找树的定义是二叉树定义的扩展·
- 每个BinaryTreeNode对要维护一个指向结点所存储元素的引用,另外还要维护指向结点的每个孩子的引用·
- 从二又查找树中删除一个元素时,必须推选出另一个结点来代替要被删除的那个结点。
- 二叉查找树的最石侧结点会存放最大元素,而其最左侧结点会存放最小元素.
- 用有序列表实现二叉查找树
-
树的主要使用之一就是为其他集合提供高效的实现
-
BinarySearchTreeList实现的分析
- 平衡二叉查找树
- 如果二叉查找树不平衡,其效率可能比线性结构的还要低·
-
- degeneratetree:蜕化树 无分支的树。
- rightrotation:右旋 当最长路径是根结点的左孩子的左子树时,一种用于使二叉树平衡的单向旋转策略
- leftrotation:左旋 当最长路径是根结点的右孩子的右子树时,一种用于使二又树平衡的单向旋转策略.
- rightleftrotation:右左旋 当最长路径是根结点的右孩子的左子树时,一种用于使二叉树平衡的双向旋转策略。
- leftrightrotation:左右旋 当最长路径是根结点的左孩子的右子树时,一种用于使二叉树平衡的双向旋转策略。
- 实现二叉查找树:AVL树
-
AVL tree:AVL树 使用每个结点的平衡因子来保持二叉查找树平衡的策略。
-
balancefactor:平衡因子 结点的一种属性,通过用右子树高度减去左子树高度计算而来。如果计算结果大于1或小于一1,那么该树就是不平衡的。
-
树〔或树的任何子树)只有两种途径能变得不平衡:插入结点或删除结点.
-
AVL树的右旋
-
AVL树的左旋
-
AVL树的右左旋
-
AVL树的左右旋
-
- 实现二叉查找树:红黑树
- red/blacktree:红黑树 使用与每个结点相关的颜色(红色或黑色)来保持二叉查找树平衡的策略。
- 在某种程度上,红黑树中的平衡限制没有AVL树那么严格·但是,它们的序仍然是logn
- 红黑树中的元素插入
- 红黑树中的元素删除
教材学习中的问题和解决过程
-
问题1:.红黑树从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点这句话怎么理解?中间的情况是否与这句话有出入?
-
问题1解决方案:这有个条件:确保没有一条路径会比其他路径长出俩倍
-
问题2:.为什么红黑树中所有的叶子结点为NIL结点且颜色为黑,而不是NULL?NIL结点存在的意义是什么?
-
问题2解决方案:在红黑树的删除算法中,有这么一种情况
这种情况下,S的左孩子与右孩子必为NIL,否则原来的红黑树就不平衡.
那么在对P的向上递归过程中,也会出现这种情况,即对应的S及S的孩子全为黑色.
NIL结点的意义就在于:向上递归的过程中识别出这种情况
代码调试中的问题和解决过程
无
上周考试错题总结
There are four basic methods for traversing a tree: preorder, inorder, postorder, and level-order.
- 错题1
A . Top down, bottom up, inorder, and postorder
B . Top down, inorder, postorder, and level-order
C . Bottom up, preorder, in order, and postorder
D . preorder, inorder, postorder, and level-order
选D,看错
- 错题2
The simulated link strategy does not allow array positions to be allocated contiguously regardless of the completeness of the tree.
A . True
B . False
选B,模拟链接策略允许连续分配数组位置而不用考虑该树的完全性。
- 错题3
In general, a balanced n-ary tree with m elements will have height lognm.
A . True
B . False
选A,具有m个元素的平衡n元树的高度为lognm
代码托管
点评过的同学博客和代码
- 本周结对学习情况
- 20172312
- 课本内容总结有自己的理解,图片较少
- 结对学习内容
- 课本第十章
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 8/8 | |
第二周 | 500/500 | 1/2 | 15/ 23 | |
第三周 | 802/1302 | 1/3 | 12/35 | |
第四周 | 1530/2832 | 2/5 | 15/50 | |
第五周 | 1165/3997 | 1/6 | 10/60 | |
第六周 | 1169/5166 | 1/7 | 15/75 | |
第七周 | 843/6039 | 1/8 | 15/90 |