2021-10-11-《C#数据结构与算法》-学习笔记-P46-P52 2-3查找树与红黑树

本文记录了C#数据结构与算法的学习笔记,重点讲解了2-3查找树和红黑树。内容包括2-3查找树的性质、添加结点的过程,以及红黑树的性质、左旋转、颜色翻转与右旋转等操作。此外,还探讨了基于红黑树实现集合和字典的性能比较。
摘要由CSDN通过智能技术生成

总结

1.视频资源P46-P52:
https://www.bilibili.com/video/BV1gE41157pC?p=8&spm_id_from=pageDriver
2.学习内容:
2021-10-11
1)2-3查找树 P46;
2)红黑树性质 P47;
3)红黑树中添加结点-左旋转 P48;
4)红黑树中添加结点-颜色翻转与右旋转 P49。
2021-10-12
5)红黑树中添加结点、包含结点、最大高度 P50;
6)基于红黑树实现集合 P51;
7)基于红黑树实现字典 P52。
2021/11/03回溯
紫色笔为回溯后增加
1)根据伪代码编写二叉树查找树类;
2)红黑树中增加结点的三种情况要多巩固。

具体内容

2021-10-11

P46 2-3查找树
1、二叉查找树与红黑树;
2、2-3查找树性质;
3、2-3查找树中添加结点;
4、2-3查找树的生长轨迹;
5、2-3查找树缺点。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

P47 红黑树性质
1、红链接;
2、左倾红黑树满足的条件;
3、实现红黑树简单框架。

在这里插入图片描述
在这里插入图片描述

P48 左旋转
1、红黑树中添加结点;
2、右结点为红色,左结点为黑色时进行左旋转。

在这里插入图片描述

P49 颜色翻转&右旋转
1、红黑树中添加结点;
2、颜色翻转;
2、连续两个红色的左子结点时进行右旋转。

在这里插入图片描述

2021-10-12

P50 红黑树中添加结点、包含结点、最大高度
1、添加结点 ;
2、红黑树的生长轨迹;
3、结点包含 判断;
4、红黑树的最大高度。

在这里插入图片描述

//红黑树类
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1
{
   
    class RBT1<E> where E:IComparable<E>
    {
   
        private const bool Red = true;
        private const bool Black = false;
        //创建私有Node类
        public class Node
        {
   
            public Node left;
            public Node right;
            public E e;
            public bool color;

            public Node(E e)
            {
   
                this.e = e;
                this.left = null;
                this.right = null;
                this.color = Red;
            }

            public bool IsEmpty(Node node)
            {
   
                if (node == null)
                {
   
                    return Black;
                }
                return node.color;
            }
        }

        private int N;
        private Node root;

        public int Count
        {
   
            get {
    return N; }
        }
        public bool IsEmpty
        {
   
            get {
    return N == 0; }
        }

        //左旋操作--右结点为红色,左结点为黑色
        private Node LeftRotate(Node node)
        {
   
            Node x = node.right;

            node.right = x.left;
            x.left = node;
            x.color = node.color;
            node.color = Red;

            return x;
        }

        //颜色翻转
        private Node FlipColors(Node node)
        {
   
            if (node.color == Red)
            {
   
                node.color = Black;
            }
            else
            {
   
                node.color = Red;
            }
            return node;
        }

        //右旋操作--连续两个左结点为红色
        private Node RightRotate(Node node)
        {
   
            Node x = node.left;

            node.left = x.right;
            x.right = node;
            x.color = node.color;
            node.color = Red;

            return x;
        }

        private bool IsRed(Node node)
        {
   
            if (node.color == Red)
            {
   
                return true;
            }
            else
            {
   
                return false;
            }
        }

        //添加结点
        public void Add(E e)
        {
   
            root = Add(root, e);
            root.color = Black;
        }

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值