二叉搜索树就是这么简单-基础篇

栏目: 数据库 · 发布时间: 6年前

内容简介:之前写过《这里先介绍最简单的二分搜索树。二叉搜索树(BST)是二叉树的一种特殊表示形式。

一、背景

之前写过《 数组 》、《 链表 》、《 队列与栈 》、《 哈希 》、《 二分查找 》,后面就开始写树相关的文章了。

这里先介绍最简单的二分搜索树。

二、概念

二叉搜索树(BST)是二叉树的一种特殊表示形式。

它满足如下特性:

  1. 每个节点中的值必须大于或等于存储在其左侧子树中的任何值。
  2. 每个节点中的值必须小于或等于存储在其右子树中的任何值。

二叉搜索树就是这么简单-基础篇

二叉搜索树的概念了解了,就需要做一些练习题加深对这个概念的理解。

初级练习题:判断是不是二叉搜索树(题号 98)。

高级练习题:实现一个二叉搜索树迭代器,每次调用 next 时返回下一个最小值。

分析:找到最小值不难,关键是找到下一个最小值。

根据二叉搜索树的性质,下一个最小值有两种可能:一种是在右子树里面;如果没有右儿子则是父节点。

找到右子树的最小值不难,关键是怎么找到父节点。

如果你学过前面的《栈和队列》文章的话,应该可以发现,可以使用栈来储存父节点路径。

这样,下一个最小值就可以轻松实现了。

二叉搜索树就是这么简单-基础篇

三、搜索

二叉搜索树主要支持三个操作:搜索、插入和删除。

这里我们先来看看搜索操作吧。

根据BST的特性,对于每个节点:

  1. 如果目标值等于节点的值,则返回节点;
  2. 如果目标值小于节点的值,则继续在左子树中搜索;
  3. 如果目标值大于节点的值,则继续在右子树中搜索。

二叉搜索树就是这么简单-基础篇

四、插入

二叉搜索树中的另一个常见操作是插入一个新节点。

有许多不同的方法去插入新节点。

这里我们只讨论一种最简单的方法。

它的主要思想是为目标节点找出合适的叶节点位置,然后将该节点作为叶节点插入。

与搜索操作类似,对于每个节点,我们将:

  1. 根据节点值与目标节点值的关系,搜索左子树或右子树;
  2. 重复步骤 1 直到到达外部节点;
  3. 根据节点的值与目标节点的值的关系,将新节点添加为其左侧或右侧的子节点。

这样,我们就可以添加一个新的节点并依旧维持二叉搜索树的性质。

二叉搜索树就是这么简单-基础篇

五、删除

删除要比我们前面提到过的两种操作复杂许多。

根据其子节点的个数,我们需考虑以下三种情况:

  1. 如果目标节点没有子节点,我们可以直接移除该目标节点。
  2. 如果目标节只有一个子节点,我们可以用其子节点作为替换。
  3. 如果目标节点有两个子节点,我们需要用合并两个子树为一个树,再删除该目标节点。

这里合并两个子树为一个树就有点复杂了。

作为基础篇这里就不多介绍了。

六、总结

二叉搜索树的优点是,即便在最坏的情况下,也允许你在 O(h) 的时间复杂度内执行所有的搜索、插入、删除操作。

有心的你应该注意到了,某些时候,树可能退化为一条链,这时候树的高度就是树的节点个数,此时复杂度就是 O(n) 而不是 O(h)

所以,这里需要一种机制,来保证树的高度不会退化为 O(n) ,应该始终为 O(h=log(n))

具体使用时,一般使用内置的数据结构 mapset 就够了。

如果涉及到较复杂的操作,那就需要采取实现一些机制,来保证树的高度不会退化。

常见的有平衡树、红黑树、AVL树、伸展树等等,后面到高阶部分了再给你们讲解。

-EOF-


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

马云如是说

马云如是说

朱甫 / 中国经济出版社 / 2008-1-1 / 39.80元

任何一个企业家的成功,都需要一种特立独行的精神。换尔言之,他一定是不断地否定别人的反对意见,坚持自己独特的观点,才能够真正走向大成功。在中国企业家群像里,马云就是这样一个特立独行的人。 目录 *永不放弃——马云论创业精神 *天下没有难做的生意——马云论经营理念 *B2B时代——马云论电子商务 *网络只是一个工具——马云论互联网与网络公司 *太多钱会坏事——马云论......一起来看看 《马云如是说》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具