红黑树01

博客介绍了红黑树存在的意义,因普通二叉树可能不平衡,查找复杂度会无限增长,所以有了自平衡二叉树(红黑树)。还列举了树的类型,如平衡二叉树、自平衡二叉树、满二叉树、完全二叉树等,最后提及 TreeMap 和 TreeSet 与红黑树的对照。

一、红黑树存在的意义

我们知道二叉树可用来排序查找,下图左边的二叉树不够平衡,查找次数或时间复杂度 O(h)可能会随着一条腿长无限增长;

所以就有了右边的【自平衡二叉树】(红黑树)

 

二、树都有哪些类型

【平衡二叉树】的平衡稳定是通过查找最低不平衡节递归实现的;

【自平衡二叉树】的平衡是通过局部不平衡的动态优化最终达到全局优化的。

【二叉树】和【非二叉树】

下图是【满二叉树】:高度为h,由2^h-1个节点构成的二叉树称为满二叉树

下图是【完全二叉树】:只能最后一层的叶子节点不要求满(叶子节点只能出现在最下层和次下层),一定要符合叶子节点从左到右满(集中左边)

三、TreeMap 和 TreeSet 如何跟红黑树对照起来

preview

preview

 

 

 

### 什么是01树? 01树是一种特殊的数据结构,通常用于处理二进制位操作以及快速查询某些特定条件下的最大值或最小值。它本质上是一个前缀树(Trie),其中节点仅存储两个子节点——分别对应于比特位为`0`和`1`的情况[^5]。 #### 数据结构特点 类似于其他树形数据结构(如红黑树、AVL树等[^1]),01树通过构建一种层次化的表示方法来优化查找效率。然而,它的设计目标更专注于解决涉及整数的按位运算问题,比如寻找异或最大值/最小值等问题。 #### 实现细节 在实际应用中,可以采用链表形式连接各个节点并单独维护头结点的方式实现简单版本的01树[^2]。不过需要注意的是,在这种情况下可能无法满足严格的内存限制或者时间复杂度需求,因此需要针对具体场景调整算法逻辑以适应不同的性能指标。 以下是基于Python语言的一个基本示例代码片段展示如何创建这样一个简单的01树: ```python class Node: def __init__(self): self.children = {} class ZeroOneTree: def __init__(self): self.root = Node() def insert(self, num): current_node = self.root for i in range(31, -1, -1): # Assuming we're dealing with integers up to 32 bits. bit = (num >> i) & 1 if bit not in current_node.children: current_node.children[bit] = Node() current_node = current_node.children[bit] def find_max_xor(self, num): max_xor = 0 current_node = self.root for i in range(31, -1, -1): bit = (num >> i) & 1 toggled_bit = 1 - bit if toggled_bit in current_node.children: max_xor |= (toggled_bit << i) current_node = current_node.children[toggledled_bit] elif bit in current_node.children: max_xor |= (bit << i) current_node = current_node.children[bit] else: break return max_xor ^ num ``` 此段程序定义了一个名为 `ZeroOneTree` 的类及其成员函数用来插入数值到该树当中,并提供了计算给定数字与其他已存入元素之间最大的XOR结果的功能。 #### 库支持情况 现代编程语言往往提供标准库帮助开发者轻松调用常见数据结构而不必每次都手动编码它们。例如C++ STL,C# .Net Framework 或者Java Collection Framework 都包含了丰富的集合类型供用户选用[^3] 。但是像上面提到过的那样复杂的自定义结构则需自行开发完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值