Update test_rbtree.h

This commit is contained in:
kyt_2002 2023-10-05 19:04:02 +08:00
parent 24f8837469
commit b8eb636bfd
1 changed files with 39 additions and 40 deletions

View File

@ -1,60 +1,59 @@
/*
* Copyright (c) 2023 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file: test_rbtree.h
* @brief: a head file of red-black tree structure
* @version: 1.0
* @author: AIIT XUOS Lab
* @date: 2023/6/23
*/
#ifndef REDBLACKTREE_H_
#define REDBLACKTREE_H_
/*
* redblacktree.h
*
* (Red-Black Tree)
* O(log n)
*/
#include <stdbool.h>
#include <stdio.h>
typedef struct RedBlackNode
{
int key;
struct RedBlackNode *left_child;
struct RedBlackNode *right_child;
struct RedBlackNode *parent;
bool is_red;
// 红黑树节点结构
typedef struct RedBlackNode {
int key; // 键值
struct RedBlackNode *left_child; // 左子节点指针
struct RedBlackNode *right_child; // 右子节点指针
struct RedBlackNode *parent; // 父节点指针
bool is_red; // 红色节点为true黑色节点为false
} RBNodeType;
typedef struct RedBlackTree
{
RBNodeType *root;
RBNodeType *leaf;
// 红黑树结构
typedef struct RedBlackTree {
RBNodeType *root; // 根节点指针
RBNodeType *leaf; // 表示NIL的叶子节点
} RBTreeType;
void TestRBTree(void);
// 先序遍历红黑树,输出节点的键值和颜色
void RBTreeTraversal(RBTreeType *tree, RBNodeType *node);
// 左旋转操作
void RBTreeLeftRotate(RBTreeType *tree, RBNodeType *current_node);
void RBTreeRightRotate(RBTreeType *tree, RBNodeType* current_node);
// 右旋转操作
void RBTreeRightRotate(RBTreeType *tree, RBNodeType *current_node);
void InsertFixup(RBTreeType *tree, RBNodeType* current_node);
// 插入节点后的修复操作
void InsertFixup(RBTreeType *tree, RBNodeType *current_node);
void RBTreeInsert(RBTreeType *tree, RBNodeType* new_node);
// 向红黑树中插入新节点
void RBTreeInsert(RBTreeType *tree, RBNodeType *new_node);
void DeleteFixup(RBTreeType *tree, RBNodeType* current_node);
// 删除节点后的修复操作
void DeleteFixup(RBTreeType *tree, RBNodeType *current_node);
void RBTreeDelete(RBTreeType *tree, RBNodeType* target_node);
// 从红黑树中删除指定节点
void RBTreeDelete(RBTreeType *tree, RBNodeType *target_node);
RBNodeType* FindSuccessor(RBTreeType *tree, RBNodeType* current_node);
// 寻找后继节点
RBNodeType *FindSuccessor(RBTreeType *tree, RBNodeType *current_node);
RBNodeType* RBTreeSearch(RBTreeType *tree, int key);
// 在红黑树中搜索指定键值的节点
RBNodeType *RBTreeSearch(RBTreeType *tree, int key);
#endif
// 测试红黑树的功能
void TestRBTree(void);
#endif // REDBLACKTREE_H_