学习 《算法导论》第13章 红黑树 总结二

本文是《算法导论》第13章红黑树总结的第二部分,主要介绍红黑树的插入步骤和修复算法。插入分为两步:1. 将新节点插入二叉查找树并着为红色;2. 通过修复算法保持红黑树性质。文章详细解析了插入过程中可能出现的五种情况及其修复策略,确保红黑树的平衡。
摘要由CSDN通过智能技术生成

学习 《算法导论》第13章 红黑树 总结二

学习 《算法导论》第13章 红黑树 总结一中学习了红黑树的五个性质,红黑树的结构定义以及旋转。这节学习红黑树的插入和删除操作。

红黑树的插入

在一棵n个结点的红黑树中插入一个新结点的操作可以在O(lgn)时间内完成。红黑树的插入分为两步:第一步:把红黑树当成是一棵普通的二叉查找树,把新结点插入这棵二叉查找树;第二步:为保证红黑树的性质,将插入的新结点着色.

第一步:插入

第一步:插入的算法
// 将z插入红黑树T中,假设z的data域已知
RB-INSERT(T, z)
    y<--nil
    x<--T.root
    while x != nil
        do y<-- x
            if z.data < x.data
                then x <-- x.left
                else x <-- x.right
    z.parent <-- y
    if y == nil
        then T.root <-- z
    else if z.data < y.data
            then y.left <-- z
            else y.right <-- z
    z.left <-- nil
    z.right <-- nil 
    z.color <-- RED
    RB-INSERT-FIXUP(T, z)
第一步:插入的C语言实现
RB_Node* RB_Insert(RB_Tree RB_Root, RB_Node* NewNode)
{
    RB_Node* parentnode = NULL;
    RB_Node* node = RB_Root;
    // 查找NewNode的父结点
    while(NULL != node)
    {
        parentnode = node;
        if (NewNode->data < node->data)
        {
            node = node->left;
        }
        else
        {
            node = node->right;
        }
    }
    NewNode->parent = parentnode;

    // 将NewNode插入
    if(parentnode =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值