总结
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;
}