Update test_rbtree.h
This commit is contained in:
parent
24f8837469
commit
b8eb636bfd
|
@ -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_
|
||||
|
|
Loading…
Reference in New Issue