• 数据结构之二叉树


    一、二叉树

            二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只有左子节点,有的节点只有右子节点。 二叉树每个节点的左子树和右子树也分别满足二叉树的定义

            Java中有两个方式实现二叉树:数组存储,链式存储。 基于链式存储的树的节点可定义如下:

    1. public class TreeNode {
    2. public int value;
    3. public TreeNode left;
    4. public TreeNode right;
    5. public TreeNode(TreeNode left, int value, TreeNode right) {
    6. this.left = left;
    7. this.value = value;
    8. this.right = right;
    9. }
    10. public TreeNode(int value) {
    11. this.value = value;
    12. }
    13. public TreeNode(){}
    14. }

    二、二叉搜索树

            二叉搜索树(Binary Search Tree,BST)又名二叉查找树,有序二叉树或者排序二叉树,是二叉树中比较常用的一种类型。二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。

            我们分析一下时间复杂度。在第一颗树中,假如要找8这个元素,要与10进行比较,比10小看左子树,然后比较6这个元素,比6大,走右边就可以找到了,一个进行了2次查找。同理,在二棵树中查找9,先比较8,再比较11,再比较10,这样就找到了。其中,每一层的元素是2^{i},次数就是i,所以时间复杂度就是O(\log n)

            有一种特殊情况,只有左子树,这种情况属于最坏的情况,二叉查找树已经退化成了链表,左右子树极度不平衡,此时查找的时间复杂度肯定是O(n)。

    三、红黑树

            红黑树(Red Black Tree):也是一种自平衡的二叉搜索树(BST),之前叫做平衡二叉B树(Symmetric Binary B-Tree)。

            性质1:节点要么是红色,要么是黑色。

            性质2:根节点是黑色

            性质3:叶子节点都是黑色的空节点。

            性质4:红黑树中红色节点的子节点都是黑色。

            性质5:从任一节点到叶子节点的所有路径都包含相同数目的黑色节点。

    在添加或删除节点的时候,如果不符合这些性质会发生旋转,以达到所有的性质,保证平衡

    红黑树的时间复杂度:

            查找:红黑树也是一棵BST(二叉搜索树)树,查找操作的时间复杂度为:O(log n)

             添加:添加先要从根节点开始找到元素添加的位置,时间复杂度O(log n) ,添加完成后涉及到复杂度为O(1)的旋转调整操作,故整体复杂度为:O(log n)。

             删除:首先从根节点开始找到被删除元素的位置,时间复杂度O(log n) , 删除完成后涉及到复杂度为O(1)的旋转调整操作,故整体复杂度为:O(log n)。

  • 相关阅读:
    如何重置 docker中的mariadb的root
    国学*周易*梅花易数 代码实现效果展示 - 梅花心易
    【已解决】 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘.
    代码随想录算法训练营总结 | LeetCode
    Modelsim下载安装【Verilog】
    C#语言基础速成Day07
    【数论】莫比乌斯反演
    Kmeans特征降维方法
    C++ Const
    【LeetCode-简单题】1047. 删除字符串中的所有相邻重复项
  • 原文地址:https://blog.csdn.net/weixin_53094999/article/details/136432082