20162324 2017-2018-1 《程序设计与数据结构》第8周学习总结

20162324 2017-2018-1 《程序设计与数据结构》第8周学习总结

教材学习内容总结

二叉查找树

  • 添加元素
    实际上再添加元素的过程就是一个排序的过程,每一元素经过比较之后在添加到树中。虽然这样相对来说比较的复杂,但是这一个复杂的方法,却换来了后面的许多的方法的,复杂度就会大大的降低。左子树比根小,右子树比根大。这就再后来的各种查找的方法的复杂度就会大大的降低。因为二叉查找树的元素时有序的所以就有叫做二叉排序树。下图就是一个加入元素的示意图;

  • 删除元素

    在删除元素的过程终会有如图的三种情形,前两种情形的形式比较的简单,就是直接删除,之后将他的子树接在被删除的元素的父节点上。而第三种情形就比较的复杂,因为他既有左子树又有右子树所以就要考虑谁来代替父节点的位置的问题,所以就要用到他的中序遍历,在遍历之后将目标元素删除,他的后继就填补原先的父节点留下的空缺也就完成了第三种情形的删除元素的操作。

  • 实现二叉树
    这一点在实验报告中体现.

  • 平衡二叉树
    在上面的陈述中提及到了查找二叉树的一个性质那就是右子树比根打,左子树比根小。由于这个问题也就出现了一些比较极端的情况,由于选取出来作为根的元素过大或者过小就有可能出现如图的情况:

这样的情况对于我们在实现的方法的情况下是非常不好的情况,大大的降低了算法的效率。所以我们需要平衡二叉查找树,可以通过旋转来使已经退化的数恢复平衡。课本上介绍了四种操作:

  • 右旋转

  • 左旋转

  • 右-左旋转

  • 左-右旋转

代码托管

  • 下周一起统计之后提交

其他(感悟、思考等,可选)

这周主要就是忙着做实验,过程比较的坎坷,很不顺利当然在同学的帮助下解决了很多的问题,站在巨人的肩膀上这句话说的很有道理

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 196/196 1/1 11/11 对于算法有了进一步的了解
第二周 76/270 1/2 10/21 了解一种新的方法,提高代码的复用性。
第三周 757/1027 2/4 10/31 了解很多的高效率的排序的方法和两种查找方法
第四、五、六 1768/2805 6/10 45/76 了解队列、栈等相关知识
第七周 1037 /3842 3/13 14/90 了解了非线性结构树
第八周 下周一起统计 2/15 15/105 进一步了解树

参考资料

原文地址:https://www.cnblogs.com/CHUNWANG/p/7751009.html