数据结构之二叉树

一、二叉树

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

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

java 复制代码
public class TreeNode {
    public int value;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(TreeNode left, int value, TreeNode right) {
        this.left = left;
        this.value = value;
        this.right = right;
    }

    public TreeNode(int value) {
        this.value = value;
    }
    
    public TreeNode(){}

}

二、二叉搜索树

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

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

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

相关推荐
CodeRecycle1 小时前
Python 自动配置 pip 支持库(通过 Windows Bat 脚本)
算法
liliangcsdn2 小时前
特质偏度因子的计算示例和分析
算法
荆棘鸟智能2 小时前
无人机遥感图像实时拼接算法工程实践:从特征提取到全景融合的完整技术链路
算法·无人机
xxwxx__2 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 58. 最后一个单词的长度 | C++ 极简反向遍历与单变量状态机
算法
AgentMaster3 小时前
企业如何应用智能客服?5 个典型场景的技术架构与实施路径
大数据·算法
程曦曦3 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
郝学胜-神的一滴3 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
weixin_307779134 小时前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab