10、二叉树:二叉树到底长什么样子你好,我是王健伟。 前面讲解过的线性表,是以线性结构来组织数据的,数据之间只是简单的前后次序关系。但问题在于,线性结构对数据的组织结构过于单一,对于数据的访问速度也过于缓慢,在一些复杂的应用领域中,这种简单的线性结构不足以表达问题。 这个时候,我们就...2025-12-14快速上手C++数据结构与算法
11、二叉树:深度优先和广度优先遍历是什么你好,我是王健伟。 今天我们来聊一个非常重要的二叉树遍历问题。 二叉树的遍历,就是指从根节点出发,按照某种次序(某条搜索路径)依次访问二叉树中的所有节点,使每个节点都被访问且只被访问一次。“访问”的含义比较广泛,比如对节点做各种处理,显示节点所保存的...2025-12-14快速上手C++数据结构与算法
12、二叉树:如何存储二叉树你好,我是王健伟。 聊过了二叉树的遍历问题,终于要开始写程序了,所以今天就来聊聊存储二叉树的几种方法。 二叉树的存储一般有两种方式,一种是基于数组的顺序存储方式,一种是链式存储方式。它们有什么不同呢? 顺序存储方式顺序存储方式是用一段连续的内存单元(...2025-12-14快速上手C++数据结构与算法
13、线索二叉树:如何线索化二叉树以提升访问速度你好,我是王健伟。 今天我要和你分享的主题是“线索二叉树”。 和传统二叉树相比,线索二叉树可以进一步提高访问二叉树节点的速度,从而提高访问二叉树的效率,当然,“线索”这个概念的引入也意味着要对原来的二叉树实现代码做出相应的修改。 那么,什么是线索?要...2025-12-14快速上手C++数据结构与算法
14、二叉查找树(BST):查找速度你最行你好,我是王健伟。 今天我要和你分享的主题是“二叉查找树”。 我们知道,二叉树是用来保存数据的。那么在需要的时候,这些保存在二叉树中的数据,要怎么才能被快速地找到和取出呢?这就需要在保存数据的时候遵循一定的规律。 遵循这种保存数据的规律所构成的二叉树...2025-12-14快速上手C++数据结构与算法
15、平衡二叉树(AVL):平衡如此重要,怎么做到的你好,我是王健伟。 上节课我们讨论了“二叉查找树”这个话题,最后提到,为了提高查找效率,应该尽可能地让二叉查找树的高度变得最小。也就是说,在创建二叉查找树的时候,要尽可能让二叉查找树保持左右节点的平衡。这就是“平衡二叉树”的由来。 平衡二叉树作为后续...2025-12-14快速上手C++数据结构与算法
16、平衡二叉树(AVL):节点删除后的平衡性调整你好,我是王健伟。 上节课我们了解了什么是平衡二叉树,也详细讲解了插入一个新的节点后如何保持该树仍旧是一颗平衡二叉树。本节课我将继续与你分享在删除一个平衡二叉树中的节点后如何保持平衡的话题。 平衡二叉树删除某个节点的操作与二叉查找树删除某个节点的操作...2025-12-14快速上手C++数据结构与算法
17、红黑(R、B)树:和平衡二叉树有什么不同你好,我是王健伟。 上次我和你分享了“平衡二叉树”这个话题,引出了“平衡性调整”的概念。主要目的是让这棵二叉树左右看起来比较“平衡”,不出现左子树很高、右子树很矮,或者左子树很矮、右子树很高的情形。这样,在进行节点的查找、插入、删除等操作时效率会比较...2025-12-14快速上手C++数据结构与算法
18、红黑(R、B)树:节点插入后的平衡性调整你好,我是王健伟。 前面我们提到过,向红黑树中插入新的节点会导致红黑树失去平衡,所以,插入新节点后,必须对该红黑树进行平衡性调整。红黑树的平衡性调整,是通过节点变色或者旋转来实现的。 我们先来想想,红黑树插入节点操作一般分为几种情况呢? 首先,对于没...2025-12-14快速上手C++数据结构与算法
19、红黑(R、B)树:节点删除后的平衡性调整(一)你好,我是王健伟。 上次我和你分享了红黑树的概念和基础实现代码,以及向红黑树插入新节点后进行平衡性调整的方法。这次我将继续和你分享另一个重要的话题——从红黑树中删除一个节点后的平衡性调整。 红黑树的删除操作比较繁琐和复杂,所以我建议,如果能不实际删除...2025-12-14快速上手C++数据结构与算法