From 5f6790687f959f1c6c02f9167311925a66c76389 Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Tue, 25 Jun 2024 18:16:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tree.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/tree.c b/src/tree.c index a82dd25..b64a972 100644 --- a/src/tree.c +++ b/src/tree.c @@ -1089,13 +1089,18 @@ static bool tree_rb_rebalance(struct _tree* self, struct _tree_node* node) struct _tree_node* uncle = NULL; /** - * @brief 考虑三种情况,其余三种对称即可 + * @brief 新插入节点为红色,且父节点为红色的情况下,需要调整。 * - * 新插入节点为红色,若父节点为黑色,则不用处理 + * 主要考虑前三种情况[1-3],其余三种[4-6]对称操作即可 + * + * 原则只有一个,那就是想办法维持红黑树性质不变 * * | 情况 | 说明 | 调整方式 | * | ---- | --- | -------- | - * | 1 | + * | 0 | 父节点为黑色 | 不用处理 + * | 1 | 父红,爷黑,叔红 | 仅变色即可:父黑,爷红,叔黑 + * | 2 | 父红,爷黑,叔黑 | (若爷孙在同一边)父黑,爷红,爷左/右旋 + * | 3 | 父红,爷黑,叔黑 | (若爷孙在不同边)先父左右旋,将新父变黑,随后爷红,爷左/右旋 */ while(node->parent != NULL && node->parent->color == RBT_RED) {