数据结构与算法-基础(十)平衡二叉搜索树

这篇具有很好参考价值的文章主要介绍了数据结构与算法-基础(十)平衡二叉搜索树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

二叉搜索树的特性-节点的左侧部分比它小,右侧部分比它大,使得二叉搜索树在查找节点有二分法的效果,也提高了它的添加和删除处理,毕竟添加和删除也是先查找位置,然后再处理。

平衡二叉搜索树就是持续保证这样的高效性,进入正题:

二叉搜索树在添加或者删除的过程中,在一些场景下退化为链表,比如对比一组数据:7、4、9、2、5、8、11。按照现在的顺序添加和按照数据的大小依次添加的结果:

当数据已经有顺序,使用二叉搜索树添加就会变成一个线性链表,这是我们不愿意看到的结果。

同理,在删除节点的时候,也是容易多次删除之后的二叉搜索树也会是一个线性链表。

所以就引入平衡二叉搜索树来避免退化成线性表的问题。

平衡

二叉搜索树节点数量确定不变的情况下,左右子树的高度越接近,这个二叉搜索树就越平衡。最理想的平衡就是左右子树的高度差为 0 或 1,比如满二叉树或完全二叉树。

如何平衡?

添加节点或者删除节点是不能限制,也就是不能控制二叉搜索树的节点数量。所以只能在添加或者删除之后去调整二叉搜索树的高度,达到平衡。

若要达到理想中的平衡(比如完全二叉树),也是没有问题的,就是增加调整的次数的处理。但是凡事都要有个度,调整的次数多了,反而会增加时间复杂度。所以调整到平衡的原则就是用尽量少的调整次数达到适度平衡就好,这样达到适度平衡的二叉搜索树,也叫做平衡二叉搜索树

平衡二叉搜索树

平衡二叉搜索树,英文为 Balanced Binary Search Tree,简称 BBST。比较经典的平衡二叉搜索树有AVL 树红黑树。这里先简单介绍,平衡二叉搜索树逻辑和细节很多,后在接下来分很多期来说明。

AVL 树

AVL 树命名是根据它的两位发明者名称得来,是相对很早发明的自平衡搜索树之一。

AVL 树引入平衡因子的概念,平衡因子为某个节点的左右子树的高度差。每个节点的平衡因子只可能是 1、0、-1,当超过这个范围就是失衡

红黑树

红黑树也是自平衡的二叉搜索树,它的节点只有红色或者黑色,并且根节点是黑色,叶子节点是红色,红色节点的子节点必须是黑色,父节点也必须是黑色。

这些规则构成整个红黑树。

AVL 树和红黑树被应用到很多场景,是数据结构中基础并且重要的部分。很多优秀的数据结构或者算法基于它实现或者借鉴它的思路。很值得花费精力去弄懂它。文章来源地址https://www.toymoban.com/news/detail-711256.html

到了这里,关于数据结构与算法-基础(十)平衡二叉搜索树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】平衡二叉树(AVL树)

    给你一个数列{1,2,3,4,5,6},要求创建二叉排序树(BST),并分析问题所在。 BST 存在的问题分析 : 左子树全部为空,从形式上看,更像一个单链表。 插入速度没有影响。 查询速度明显降低(因为需要依次比较),不能发挥 BST 的优势,因为每次还需要比较左子树,其查询速度

    2024年02月13日
    浏览(34)
  • 数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)

    目录 基本介绍 平衡因子 平衡二叉树  平衡二叉树的高度  什么是平衡二叉树? 以一个例子来解释一下: 搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度ASL   在二叉搜索树中查找一个元素:  (a)要找到Jan,需要查找一次;要找到Feb,需要查找两次;

    2023年04月26日
    浏览(49)
  • 计算机基础--->数据结构(6)【AVL树(平衡二叉树)】

    平衡二叉树是一种特殊的二叉搜索树,他的左子树与右子树的高度差不超过1。并且左右两个子树都是一颗平衡二叉树。保持平衡的特性使得平衡二叉树的查询、插入和删除操作在平均和最坏情况下的时间复杂度都是 O(logn) ,其中n是树中节点的数量。 相比于普通的二叉搜索树

    2024年02月12日
    浏览(44)
  • C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

    本文是介绍众多平衡二叉搜索树(BBST)的第一篇——介绍AVL树。故先来引入BBST的概念。由于上一篇介绍的二叉搜索树(BST)在极度退化的情况下,十分不平衡,不平衡到只朝一侧偏,成为一条链表,复杂度可达 O ( n ) O(n) O ( n ) ,所以我们要在“平衡”方面做一些约束,以防

    2024年02月13日
    浏览(24)
  • 【数据结构】平衡二叉搜索树(AVL树)——AVL树的概念和介绍、AVL树的简单实现、AVL树的增删查改

      为什么要引入平衡二叉搜索树?   在之前我们学习了二叉搜索树,二叉搜索树的结构类似于一个倒置的树,而左子树的值小于根节点的值,右节点的值大于根节点的值,这种结构使得二叉搜索树在处理有序数据时非常高效。但是如果 在传入的数据为有序或接近有序,

    2024年02月07日
    浏览(37)
  • Java数据结构与算法:二叉搜索树

    Java数据结构与算法:二叉搜索树 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在计算机科学中,二叉搜索树(Binary Search Tree,简称BST)是一种常见的树形数据结构,它具有良好的查找和插入性能。每

    2024年01月24日
    浏览(32)
  • 【算法与数据结构】700、LeetCode二叉搜索树中的搜索

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :二叉搜索树(Binary Search Tree, BST)的性质:所有左子树节点键值 中间节点键值 所有右子树节点键值,并且左右子树都是二叉搜索树。那么我们根据此性质,对比目标值和中间节点,如

    2024年02月10日
    浏览(29)
  • 【算法与数据结构】98、LeetCode验证二叉搜索树

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :注意不要落入下面你的陷阱,笔者本来想左节点键值中间节点键值右节点键值即可,写出如下代码:   在leetcode执行时遇到下面的错误,再次读题,发现是所有左子树的键值小于

    2024年02月09日
    浏览(28)
  • 数据结构与算法之二叉树: Leetcode 98. 验证二叉搜索树 (Typescript版)

    验证二叉搜索树 https://leetcode.cn/problems/validate-binary-search-tree/ 描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身

    2024年02月16日
    浏览(27)
  • 数据结构-----平衡二叉树

      目录 前言 1.平衡二叉树 1.1概念与特点 1.2与二叉排序树比较 1.3判断平衡二叉树 2.平衡二叉树的构建 2.1平衡因子 BF 2.2 LL型失衡(右旋) 2.3 RR型失衡(左旋) 2.4 LR型失衡(先左旋再右旋)  2.5 RL型失衡(先右旋再左旋) 2.6构建平衡二叉树代码实现  3.删除节点操作 3.1删除叶

    2024年04月13日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包