• 树结构_平衡树


    平衡树

      1. 二叉搜索树的优点

                    二叉搜索树作为数据存储的结构,最大的优势是可以快速找到给定关键字的项,并且可以快速的实现插入和删除数据操作

                    因为二叉搜索树采用了二分查找的策略

      2. 二叉搜索树存在的问题

                    但是二叉搜索树有一个麻烦的问题:若插入的数据是一个有序数列(从小到大/从大到小),会造成二叉搜索树在某个方向上深度很深,

                    使得数据在树的左右分布不均匀,二叉搜索树变成不平衡树,极端情况下,树会变化变成一个链表,事件复杂度由O(log(n)) -->O(N)

      3. 因此,为了保证二叉搜索树的搜索效率,应该尽量使得树的左右子孙个数相等,使得二叉搜索树变成平衡树

      4. 常见的平衡树

                    AVL树:最早的一种平衡树(每个节点多保存了一个数据),但是AVL树插入和删除操作效率不如红黑树

                    红黑树:

                        1. 通过一些特性来保证树的平衡

                        2. 有余数平衡树,事件复杂度为O(log(n))

                        3. 插入/删除效率要高于AVL树,所以平衡树的应用基本都是红黑树

      5. 红黑树简介

                    1. 红黑树是数据结构中的难点,难点中的难点

                    2. 大型的网络公司才会考察红黑树

                    3. 小公司基本不考察红黑树,因为难

      6. 红黑树的规则

                    1. 节点是红色或者黑色的

                    2. 根节点是黑色

                    3. 每个叶节点都是黑色的空节点(NIL节点)

                    4. 每个红色节点的两个子节点都是黑色的(每个叶节点到根的所有路径上不能由两个连续的红色节点)

                    5. 从任何节点到其每个叶子节点的所有路径包含相同的黑色节点

                    上述五条红黑树的规则可以保证以下特性:

                        1. 从根到叶的最长可能路径,不会超过最短可能路径的两倍

                            如何做到的呢?

                                。。。

                        2. 红黑树基本是平衡的

                        3. 虽然不能保证绝对的平衡,到那时可以确保在最坏的情况下依然是高效的

  • 相关阅读:
    675 对象的引用-浅拷贝-深拷贝
    674 vue3侦听器watch
    673 vue计算属性:缓存,setter和getter
    明明有了promise,为啥还需要async await?
    Js常用数组方法汇总
    一些非常有用的Js单行代码
    Js获取验证码倒计时
    前端截取字符串:JS截取字符串之substring、substr和slice详解
    javascript全局变量与局部变量
    JS实现快速排序算法
  • 原文地址:https://www.cnblogs.com/carreyBlog/p/13657134.html
Copyright © 2020-2023  润新知