27、递归树:如何借助树来求解递归算法的时间复杂度?今天,我们来讲这种数据结构的一种特殊应用,递归树。 我们都知道,递归代码的时间复杂度分析起来很麻烦。我们在[第12节《排序(下)》]那里讲过,如何利用递推公式,求解归并排序、快速排序的时间复杂度,但是,有些情况,比如快排的平均时间复杂度的分析,用递推...2025-10-30
26、红黑树(下):掌握这些技巧,你也可以实现一个红黑树红黑树是一个让我又爱又恨的数据结构,“爱”是因为它稳定、高效的性能,“恨”是因为实现起来实在太难了。我今天讲的红黑树的实现,对于基础不太好的同学,理解起来可能会有些困难。但是,我觉得没必要去死磕它。 我为什么这么说呢?因为,即便你将左右旋背得滚瓜烂熟...2025-10-30
25、红黑树(上):为什么工程中都用红黑树这种二叉树?上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大...2025-10-30
24、二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂...2025-10-30
23、二叉树基础(上):什么样的二叉树适合用数组来存储?前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。 我反复强调过,带着问题学习,是最有效的学习方式之一,所以在正式的内容开始之前,我还是给你出一...2025-10-30