当前位置: 首页 > news >正文

网站公告栏怎么做售卖链接

网站公告栏怎么做,售卖链接,企业免费网站建设模板,wordpress 调用相册简介 普通的二分搜索树是有可能退化成链表的,这意味着时间复杂度从O(log2n)O(log_2{n})O(log2​n)降至O(n)O(n)O(n),为了规避这种现象,平衡二叉树的概念应运而生。 在计算机科学中,AVL树是最先发明的自平衡二叉查找树。AVL树得名…

简介

普通的二分搜索树是有可能退化成链表的,这意味着时间复杂度从O(log2n)O(log_2{n})O(log2n)降至O(n)O(n)O(n),为了规避这种现象,平衡二叉树的概念应运而生。

在计算机科学中,AVL树是最先发明的自平衡二叉查找树。AVL树得名于它的发明者G. M. Adelson-VelskyE. M. Landis,他们在1962年的论文《An algorithm for the organization of information》中发表了它。

特点

  1. 本身首先是一棵二叉搜索树。

  2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。

相关概念

平衡因子

左右子树高度差。只要高度差不超过1,则为平衡状态。否则就得想办法使其平衡。这个方法叫旋转👇

旋转

增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

右旋

图片来源

左旋

与右旋相反

组合

左旋右旋是调整平衡的最小操作,这意味着在更复杂的情况下需要进行左旋右旋组合操作才能达到目的,什么情况下适合什么样的操作呢?

  • LL:由于在当前节点左子树的左子树上插入节点,导致平衡因子由1增至2,此时只需进行一次右旋操作

  • RR:与LL相反

  • LR:在左子树的右子树上插入节点导致失衡,需要先左旋后右旋

  • RL:与LR相反

实现

完整代码

节点

维护平衡的前提是通过旋转,而旋转的本体是节点,因此将其放在节点类中。

  1. 平衡因子

            private int getBalanceFactor() {return getHeight(left) - getHeight(right);}private static int getHeight(Node node) {return node == null ? 0 : node.height;}
    
  2. 旋转(以右旋为例),同时刷新高度

    刷新高度操作不需要担心空指针问题,交给调用者👇

            public Node<K, V> rightRotate() {Node x = this.left;Node t = x.right;x.right = this;this.left = t;return x.refreshHight();}private Node<K, V> refreshHight() {height = 1 + Math.max(getHeight(this.left), getHeight(this.right));return this;}
    
  3. 平衡

            public Node<K, V> balance() {int balanceFactor = getBalanceFactor();if (balanceFactor > 1 && left.getBalanceFactor() >= 0) {return rightRotate();}if (balanceFactor < -1 && right.getBalanceFactor() <= 0) {return leftRotate();}if (balanceFactor > 1 && left.getBalanceFactor() < 0) {left = left.leftRotate();return rightRotate();}if (balanceFactor < -1 && right.getBalanceFactor() > 0) {right = right.rightRotate();return leftRotate();}return this;}
    

AVL

在二分搜索树的基础上增加平衡操作

    private Node<K, V> balance(Node<K, V> node) {return node == null ? null : node.balance();}

在增删等可能影响平衡的方法中调用平衡:

    public Node<K, V> add(Node<K, V> node, K k, V v) {if (node == null) {size++;return new Node<>(k, v);}Comparator<K> kComparator = Comparator.naturalOrder();if (Objects.compare(k, node.key, kComparator) < 0) {node.left = add(node.left, k, v);} else if (Objects.compare(k, node.key, kComparator) > 0) {node.right = add(node.right, k, v);} else {node.value = v;}return node.balance();}public Node<K, V> remove(Node<K, V> node, K k) {if (node == null) {return null;}if (k.compareTo(node.key) < 0) {node.left = remove(node.left, k);return node.balance();} else if (k.compareTo(node.key) > 0) {node.right = remove(node.right, k);return node.balance();}size--;if (node.left == null) {Node<K, V> right = node.right;node.right = null;return balance(right);}if (node.right == null) {Node<K, V> left = node.left;node.left = null;return balance(left);}Node<K, V> successor = minimum(node.right);successor.right = remove(node.right, successor.key);size++;successor.left = node.left;node.left = node.right = null;return balance(successor);}
http://www.lbrq.cn/news/2409247.html

相关文章:

  • 凡科做网站要钱如何发布自己的网站
  • 政府网站建设模板发布友情链接
  • 网站建设方案有哪几种怎样让自己的网站排名靠前
  • 织梦源码免费下载我们seo
  • 网站做政务网络营销成功的案例
  • 南康网站建设免费收录链接网
  • 网站目录权限 user百度云搜索资源入口
  • 网页策划方案怎么做windows优化大师怎么样
  • 八年级信息上册如何做网站百度文库个人登录
  • 网站建设的工作在哪里找客户资源推广价格一般多少
  • wordpress个人网站主题神马搜索推广
  • 免费好用的crm系统淘宝网店的seo主要是什么
  • 美橙网站建设经典案例如何网络推广
  • 网站建设导航栏钟南山今天感染新冠了
  • 网页版传奇世界什么组合最好seo具体seo怎么优化
  • 网站建设任务执行书app推广拉新
  • 如何与老板谈网站建设深圳网络推广团队
  • 腾讯用户体验网站广告网络推广怎么做
  • 两学一做教育网站宁波seo公司排名榜
  • 建筑兼职招聘网广州谷歌优化
  • 无锡建行网站描述建设一个网站的具体步骤
  • 优秀个人网站模板下载免费推广网站平台
  • 做网站哪家网站好艺人百度指数排行榜
  • 网站程序源码上传到空间打开网站首页还是显示的程序原源代码seo排名点击首页
  • 东莞新闻头条新闻今天seo软文代写
  • 做网站是个什么行业app拉新一手渠道
  • 做妈妈网站怎么赚钱优化大师官方下载
  • 花桥做网站合肥网站排名推广
  • 服务企业建设网站泉州关键词优化报价
  • 做盗版小说网站违法吗网站外链出售
  • (5)从零开发 Chrome 插件:Vue3 Chrome 插件待办事项应用
  • 神经网络:池化层
  • 从磁记录到数据中心:磁盘原理与服务器架构的完整技术链路
  • sql练习二
  • 【无标题】重点阅读——如何在信息层面区分和表征卷曲维度,解析黑洞内部的维度区分机制
  • 81、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:压栈内容