Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了(Swift 实现)AVL树(自平衡搜索二叉树)创建,插入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

这个实现起来有点难度了,看动画竟然没有摸出什么规律来,插入的方法前面是一样的,后面又做了调整的。好吧,这个我终于看了网上的大神才搞明白Swift的代码如何写出来点这个链接 引言 自平衡二叉树避免了,有的时候二叉搜索树会形成链式结构,就好比,我这一串数字都已经排好序了,从小到大,那按着二叉搜索树,添加的话,都是在右边,右边的右边,那就是个链式结构了,这样就不太好了,所以就想着把它改变改变,于是就有了

这个实现起来有点难度了,看动画竟然没有摸出什么规律来,插入的方法前面是一样的,后面又做了调整的。好吧,这个我终于看了网上的大神才搞明白Swift的代码如何写出来点这个链接

引言

自平衡二叉树避免了,有的时候二叉搜索树会形成链式结构,就好比,我这一串数字都已经排好序了,从小到大,那按着二叉搜索树,添加的话,都是在右边,右边的右边,那就是个链式结构了,这样就不太好了,所以就想着把它改变改变,于是就有了AVL树。AVL的查找最坏时间复杂度要比二叉搜索树要低,数字越多越低的厉害,O(log N),以2为底。

定义

  1. 它的左子树和右子树都是AVL树
  2. 左子树和右子树的高度差不能超过1

修正

在AVL树,每一个节点都引入了平衡因子的参数(balance factor,以下用BF表示),这个参数表示了这个节点左、右子树的高度差,那么AVL树所有节点的BF(男朋友?)只能是-1,0,1。只要它的绝对值大于1,那左右两边高度相差就有些许远了,那就不平衡了,有这四种情况,我没有总结出来,网上查出来的。(发现个好图)

  1. 左左情况(LL)
    也就是往一个节点的左孩子的左孩子添加一个节点的时候,一下子就不平衡了,看这个图

    图表达的很清楚,只是我自己写的时候没有父节点这个概念,导致在Swift的方法里没有办法直接去改变传参的值,inout是可以,可是它的一些属性没有办法访问,还求大神指正。
  2. 左右情况(LR)
    这种情况先变成上面那个样子,然后再按着上面那个样子走
  3. 右右情况(RR)
  4. 右左情况(RL)

代码就看上面大神的吧,我自己不好意思贴了

大佬总结

以上是大佬教程为你收集整理的(Swift 实现)AVL树(自平衡搜索二叉树)创建,插入全部内容,希望文章能够帮你解决(Swift 实现)AVL树(自平衡搜索二叉树)创建,插入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。