20162322 2017-2018-1 《程序设计与数据结构》第八周学习总结
教材学习内容总结
二叉查找树
二叉查找树:结点的左子树中的每个元素都小于该结点,右子树中的每个元素都大于该结点,这对二叉查找树中的每个结点都成立。
添加元素
- 从根开始,沿着每个结点中元素所确定的路径,直到相应的方向上没有子结点时为止。
删除元素
- 若被删结点没有子结点,直接删除
- 若被删结点只有一个子结点,则用其子结点替代
- 若被删结点有两个结点,在树的更底层找到合适的结点代替。
实现二叉查找树
二叉查找树本质上是一棵二叉树,因此可以在BinaryTree接口和LinkedBinaryTree类的基础上实现。
平衡二叉查找树
为了提高二叉查找树的效率,我们需要对二叉查找树进行旋转,让二叉查找树尽可能平衡。
右旋转
若二叉查找树整体向左偏,我们需要对其进行右旋转。
步骤:
- 令根的左子结点变为新的根
- 令原根结点变为新根结点的右子结点
- 令原根结点的左子结点的右子结点变为原根结点的新的左子结点
左旋转
若二叉查找树整体向右偏,我们需要对其进行左旋转。
步骤:
- 令根的右子结点变为新的根
- 令原根结点变为新根结点的左子结点
- 令原根结点的右子结点的左子结点变为原根结点的新的右子结点
右-左旋转
若二叉查找树的不平衡性是由根的右子结点的左子树中的长路径引发的,需先对其进行右旋转,再左旋转
左-右旋转
若二叉查找树的不平衡性是由根的右子结点的右子树中的长路径引发的,需先对其进行左旋转,再右旋转
代码托管
(statistics.sh脚本的运行结果截图)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | 绪论 |
第二周 | 386/386 | 0/1 | 20/40 | |
第三周 | 500/886 | 2/3 | 20/60 | 选择与排序 |
第四周 | 300/1186 | 2/4 | 20/80 | 线性表 |
第五周 | 300/1486 | 1/5 | 20/100 | 栈 |
第六周 | 300/1786 | 2/7 | 20/120 | 队列 |
第七周 | 844/2630 | 3/10 | 20/140 | 树 |
第八周 | 544/3174 | 2/12 | 20/160 | 实验二(树)、二叉查找树 |
-
计划学习时间:20小时
-
实际学习时间:20小时
-
改进情况:多思考!多思考!