树和子树的定义

在数据结构中存在一种叫“树”的结构。

树的定义:

树(tree)是由n(n>=0)个节点(或元素)组成的有限集合(记为T)。

如果n=0,它是一棵空树,这是树的特征。如果n大于零,这个n个节点中有且仅有一个节点作为树的根结点,简称为根,其余节点可分为m(m>=0)个互不相干的有限集T1,T2...Tm,其中,每个子集本身又是一颗符合本定义的树,称为根结点的子树

树形的表示方法:

用一个圆圈表示一个节点,圆圈内的符号代表该节点的数据信息,节点之间的关系,通过连线表示,虽然每条连线上都不带有箭头(方向),但他们仍然是有方向的。

如a图所示的表示树形的方法叫做文形图表示法

关于树和子树的关系我们可以来举两个例子(学长的PPT截屏)

 了解了以后我们可以来推导一个特殊图形它所包含的子树

 

### 红黑左右子树高度差的特性 红黑作为一种自平衡二叉查找,并未严格要求左右子树的高度差必须保持在一个固定范围内。具体来说,红黑允许一定程度上的不平衡存在,只要满足其定义的五条基本性质即可[^2]: 1. 节点要么是红色,要么是黑色。 2. 根节点始终为黑色。 3. 所有叶子节点(NIL节点)均为黑色。 4. 如果一个节点为红色,则其两个子节点必为黑色。 5. 对于任意节点到其后代叶节点的所有路径上,经过的黑色节点数量相同。 基于这些性质,红黑并不强制要求左右子树的高度完全相等,而是通过约束条件间接控制的整体高度。理论上,红黑的最大高度不会超过 `2 * log₂(n)` 的范围[^1]。这意味着即使某些局部区域可能存在较大高度差的情况,整体结构依然能够保证近似平衡的状态。 相比之下,AVL则更加严格地限制了左右子树之间的高度差不得超过 1,即所谓的“绝对平衡”。这种严格的平衡策略虽然提升了查询效率,但也增加了维护成本,尤其是在频繁插入或删除场景下需要执行更多的旋转操作[^4]。 因此,红黑的设计目标是在性能与实现复杂度之间取得折衷方案——既保留一定水平的操作时间复杂度优势 (O(log n)) ,又降低了因过度追求完美平衡而导致额外计算开销的风险。 ```java // 下面是一个简单的 Java 实现片段用于展示如何判断某个给定节点是否违反上述提到的一些规则之一: public boolean isViolation(Node node){ if(node == null || !node.hasChildren()) return false; int blackCountLeft = countBlackNodesOnPathToLeaf(node.left); int blackCountRight = countBlackNodesOnPathToLeaf(node.right); // Check property that all paths from any given node to its descendant leaves contain the same number of black nodes. if(blackCountLeft != blackCountRight) { System.out.println("Violation detected: Unequal numbers of black nodes on different paths."); return true; } // Additional checks can be added here as per other properties... return false; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值