stl源码剖析08——平衡二叉树

本文介绍了二叉搜索树的基本概念,包括节点放置规则、查找、插入和删除操作,并阐述了在不平衡情况下如何影响搜索效率。此外,还探讨了平衡二叉树的重要性,特别是AVL树和RB树,它们通过保持平衡提高搜索性能。平衡二叉树在关联式容器的内部结构中得到应用,以确保平均访问时间减少。
摘要由CSDN通过智能技术生成

一、二叉搜索树

  • 所谓二叉搜索树,可提供对数时间的元素插入和访问
  • 节点放置规则:任何节点的键值一定大于其左子树的每一个节点的键值;并小于其右子树中的每一个节点的键值

  • 最大值、最小值:
    • 最小值:从根节点出发,一直往左走,直至无左路可走,即得到最小元素
    • 最大值:从根节点出发,一直往右走,直至无右路可走,即得到最大元素

二叉搜索树的查找

  • 从根节点出发,根据值的大小,逐个向左或向右查找,就可以查找到元素

二叉搜索树的插入

  • 插入新元素时,从根节点开始,遇键值较大者就向左,遇键值较小者就向右,一直到尾端,即为插入点

二叉搜索树的删除

  • 如果要删除的节点只有一个子节点:直接将其子节点连至其父节点即可。例如下面第一张图删除节点15
  • 如果要删除的节点有二个子节点:以右子树中的最小节点代替删除节点(从删除节点的右子节点开始开始一直向左即可找到)。例如下面第二张图删除节点12

二、平衡二叉树(平衡二叉搜索树)

  • 如果因为输入值不够随机,或者经过某些插入和删除操作,二叉搜索树可能会失去平衡,造成搜寻效率低落的情况,如下图所示

  • 树是否平衡,没有一个绝对的测量标准。“平衡”的大致意义是:没有任何一个节点过深(深度过大)
  • 不同的平衡条件,造就出不同的效率表现,以及不同的实现复杂度。有数种特殊结构如AVL-tree、RB-tree、AA-tree,均可显示平衡二叉搜索树,它们都比一般的二叉搜索树复杂,因此,插入节点和删除节点的平均时间也比较长,但是它们可以避免极难应付的最坏(高度不平衡)情况,而且由于它们总是保持某种程序的平衡,所以元素的访问时间平均而言也就比较少,一般而言其搜索时间可节省25%左右
  • 关联式容器的内部结构是一个balanced vinary tree(平衡二叉树)
  • 平衡二叉树的种类很多,包括AVL-tree、RB-tree、AA-tree等。其中广泛运用于STL的是RB-tree(红黑树)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值