教你透彻了解红黑树---第一篇

文章《教你透彻了解红黑树—第一篇》,主要了解了红黑树的来龙去脉和基础属性。

文章《教你透彻了解红黑树—第二篇》,主要说明了红黑树的旋转、插入、删除等操作。

1 背景知识

1.1 二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

以上参考Wikipedia-binary tree中的介绍

1.2 常见二叉树

  • 完全二叉树:若二叉树的高度是h,除第h层之外,其他(1~h-1)层的节点数都达到了最大个数,并且第h层的节点都连续的集中在最左边。实际上,完全二叉树和堆联系比较紧密哈,同时完全二叉树不一定是满二叉树,反之一定是。

  • 满二叉树:除最后一层外,每一层上的所有节点都有两个子节点,最后一层都是叶子节点。

  • 哈夫曼树:又称为最有数,这是一种带权路径长度最短的树。哈夫曼编码就是哈夫曼树的应用。

  • 平衡二叉树:平衡二叉树又称AVL树(Adelson-Velskii and Landis Tree),左右两个子树的高度差的绝对值不超过 1,其子树也遵循该规则。

  • 红黑树:红黑树是每个节点都带颜色的树,节点颜色或是红色或是黑色,红黑树是一种查找树。红黑树有一个重要的性质,从根节点到叶子节点的最长的路径不多于最短的路径的长度的两倍。对于红黑树,插入,删除,查找的复杂度都是O(log N)。

AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,二人在 1962 年的论文 “An algorithm for the organization of information” 中发表了它

1.3 二叉树详细介绍

有关二叉树的详细说明,请进入这篇文章查看《教你透彻了解二叉树》

2 红黑树简介

2.1 红黑树

先来看看Wikipedia 中有关Red–black tree的介绍:

A red–black tree is a kind of self-balancing binary search tree. Each node of the binary tree has an extra bit, and that bit is often interpreted as the color (red or black) of the node. These color bits are used to ensure the tree remains approximately balanced during insertions and deletions.

简单翻译如下:

红黑树,一种自平衡的二叉查找树,但在每个结点上有一个额外的存储位表示结点的颜色,可以是Red或Black。这些颜色位用来确保红黑树在插入和删除操作后仍能够近乎平衡。

既然红黑树作为一棵二叉查找树(Binary Search Tree, 又称二叉排序树,一个意思),满足二叉查找树的一般性质。下面,来了解下二叉查找树的一般性质。

二叉查找树或者是一棵空树,或者是具有下列性质的二叉树:

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的节点。

二叉查找树是一棵动态树,树的结构是变化的,是依据插入或删除后的结构来构成的。

一棵由n个节点组成的二叉查找树,其高度至少为log2(n+1),其一般操作的时间复杂度O(log2(n+1)),这个时间复杂度可以理解成其遍历一次所访问的节点数。但是,如果这棵树退化为一棵链状的树,其时间复杂度就转变为O(n)。

红黑树时间复杂度显然不会为最糟糕的O(n),其操作时间复杂度最糟糕是O(log2(n+1)),这是因为它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡。

维基百科(Wikipedia)中介绍为以下属性:

  1. A node is either red or black.
  2. The root is black. This rule is sometimes omitted. Since the root can always be changed from red to black, but not necessarily vice versa, this rule has little effect on analysis.
  3. All leaves (NIL) are black.
  4. If a node is red, then both its children are black.
  5. Every path from a given node to any of its descendant NIL nodes contains the same number of black nodes. The uniform number of black nodes in the paths from root to leaves is called the black-height of the red–black tree.

简单翻译就是:

  1. 每个结点要么是红的要么是黑的。
  2. 根结点是黑的。
  3. 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。
  4. 如果一个结点是红的,那么它的两个儿子都是黑的。
  5. 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。

下图即是一棵红黑树,图片来源于Wikipedia-binary tree
An example of a red–black tree

》》》注意上图中的叶节点并没有画出来,而是以NIL指针代替,这是因为叶节点在这里并不包含数据,只是作为结束符。

总结:上述内容旨在熟悉红黑树的基本属性,有关其旋转/插入/删除/查找等操作将会在《教你透彻了解红黑树—第二篇目》中详细说明。

为了在Windows上安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows上安装了ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows下安装使用ADB,简单易懂程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值