18、红黑(R、B)树:节点插入后的平衡性调整

你好,我是王健伟。 前面我们提到过,向红黑树中插入新的节点会导致红黑树失去平衡,所以,插入新节点后,必须对该红黑树进行平衡性调整。红黑树的平衡性调整,是通过节点变色或者旋转来实现的。 我们先来想想,红黑树插入节点操作一般分为几种情况呢? 首先,对于没...

快速上手C++数据结构与算法

19、红黑(R、B)树:节点删除后的平衡性调整(一)

你好,我是王健伟。 上次我和你分享了红黑树的概念和基础实现代码,以及向红黑树插入新节点后进行平衡性调整的方法。这次我将继续和你分享另一个重要的话题——从红黑树中删除一个节点后的平衡性调整。 红黑树的删除操作比较繁琐和复杂,所以我建议,如果能不实际删除...

快速上手C++数据结构与算法

20、红黑(R、B)树:节点删除后的平衡性调整(二)

你好,我是王健伟。 这节课我们接着讨论删除黑色叶子节点导致的红黑树平衡性调整问题。现在还有一种情况我们没有讨论到,那就是待删节点的父节点为黑色,兄弟节点也为黑色且兄弟节点不待任何孩子节点的情况。 随着我的讲解,你也可以回想上节课的思考题,看一看你想到...

快速上手C++数据结构与算法

21、哈夫曼(Huffman)树:将数据压缩后再传输更省带宽

你好,我是王健伟。 前面我们已经讲过了很多种二叉树,这节我想再和你分享一种特殊的二叉树——哈夫曼树(Huffman Tree)。 哈夫曼树也有人称为霍夫曼树或最优二叉树。先说点有趣的,哈夫曼(David Huffman)是美国的一位数学家。他在195...

快速上手C++数据结构与算法

22、树、森林、二叉树:相互之间的转换

你好,我是王健伟。 前面我们讲过了各种二叉树,这方面的知识已经够多的了,本节就来讲一讲更通用的概念:树、森林以及与二叉树之间的转换问题。 树的存储结构前面我们学习了树形结构的基本概念,在满足这个概念的前提下,一棵树可以有任意形状,可以有任意多的孩子,...

快速上手C++数据结构与算法

23、图:如何用图表达错综复杂的数据

你好,我是王健伟。 经过了长期努力,我们一起学习了树相关的知识。树是整个课程中占据篇幅最大的话题,也是面试和使用中的热门话题。而这一次,我们来说一说图。 图这种数据结构比树更加复杂。我们回想一下,树形结构中的节点或者说数据之间有明显的层次关系,一个父...

快速上手C++数据结构与算法