平衡二叉树的数据结构_红黑树数据结构

平衡二叉树的数据结构_红黑树数据结构红黑树Java集合系列之TreeMap详细介绍(源码解析)和使用示例代码来自算法第四版红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

红黑树

Java 集合系列之 TreeMap详细介绍(源码解析)和使用示例

代码来自算法第四版
红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构,能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。

平衡二叉树

在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。
AVL树的定义:
一棵AVL树满足以下的条件:
1>它的左子树和右子树都是AVL树
2>左子树和右子树的高度差不能超过1
性质:
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)).
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n))。
为了保证平衡,AVL树中的每个结点都有一个平衡因子,它表示这个结点的左、右子树的高度差,AVL树上所有结点的平衡因子值只能是-1、0、1。

红黑树,平衡二叉树对比

  • 红黑树 非严格平衡;平衡二叉树严格平衡。
  • 红黑树结点额外空间 2bit(Red,Black);平衡二叉树结点额外空间3bit(-1,0,1)。
  • 红黑树更新旋转次数,插入最多2次,删除最多3次;平衡二叉树因为严格平衡,插入最多2次,删除可达O(n),被删除结点以上父节点皆有可能旋转。
  • 红黑树查询耗时要比平衡二叉树多

建议使用场景

  • 如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。
  • 如果操作序列完全随机,没有任何关系,建议使用普通二叉树BST。
  • 如果操作序列存在一定关系,建议使用红黑树。
  • 如果操作序列完全有序,建议使用平衡二叉树。
  • 如果操作序列存在局部性,建议使用Splay伸展树。
    具体分析,斯坦福有专门的论文分析了BST,AVL,RB Tree,Splay的性能。
    Performance Analysis of BSTs in System Software](http://benpfaff.org/papers/libavl.pdf)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180173.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • torch.optim.lr_scheduler:调整学习率

    torch.optim.lr_scheduler:调整学习率本文是笔者在学习cycleGAN的代码时,发现其实现了根据需求选择不同调整学习率方法的策略,遂查资料了解pytorch各种调整学习率的方法。主要参考:https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate1综述torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(…

    2022年10月22日
  • pycharm编制索引_网页制作作品源代码

    pycharm编制索引_网页制作作品源代码tree/f/a>codeTree.txt

    2022年8月29日
  • Idea激活码永久有效Idea2021.1.1激活码教程-持续更新,一步到位[通俗易懂]

    Idea激活码永久有效Idea2021.1.1激活码教程-持续更新,一步到位[通俗易懂]Idea激活码永久有效2021.1.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1.1成功激活

    2022年6月17日
  • 不是单组分组函数「建议收藏」

    不是单组分组函数「建议收藏」问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
  • Pytorch搭建ResNet18

    Pytorch搭建ResNet18ResNet代码importtorchimporttorchvisionimporttorch.nnasnnimporttorch.nn.functionalasFimportmatplotlib.pyplotaspltimportnumpyasnp#definestructureclassBasicBlock(nn.Module):def__init__(self,in_planes,planes,stride=1):

    2022年5月26日
  • python社交网络分析_python编程:从入门到实践

    python社交网络分析_python编程:从入门到实践NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)输出结果1、测试对象data1=’今天上海的天气真好!我的心情非常高兴!如果去旅游的话我会非常兴奋!和你一起去旅游我会更加幸福!’data2=’今天上海天气真差,非常讨厌下雨,把我冻坏了,心情太不高兴了,不高兴,我真的很生气!’data3=’美国华裔科学家,祖籍江苏扬州市高邮县,…

    2022年8月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号