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_
|
#ifndef REDBLACKTREE_H_
|
||||||
#define REDBLACKTREE_H_
|
#define REDBLACKTREE_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* redblacktree.h
|
||||||
|
*
|
||||||
|
* 本文件包含红黑树(Red-Black Tree)的定义和相关函数声明。
|
||||||
|
* 红黑树是一种自平衡的二叉搜索树,用于在O(log n)时间内进行插入、删除和查找操作。
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
typedef struct RedBlackNode
|
// 红黑树节点结构
|
||||||
{
|
typedef struct RedBlackNode {
|
||||||
int key;
|
int key; // 键值
|
||||||
struct RedBlackNode *left_child;
|
struct RedBlackNode *left_child; // 左子节点指针
|
||||||
struct RedBlackNode *right_child;
|
struct RedBlackNode *right_child; // 右子节点指针
|
||||||
struct RedBlackNode *parent;
|
struct RedBlackNode *parent; // 父节点指针
|
||||||
bool is_red;
|
bool is_red; // 红色节点为true,黑色节点为false
|
||||||
} RBNodeType;
|
} RBNodeType;
|
||||||
|
|
||||||
typedef struct RedBlackTree
|
// 红黑树结构
|
||||||
{
|
typedef struct RedBlackTree {
|
||||||
RBNodeType *root;
|
RBNodeType *root; // 根节点指针
|
||||||
RBNodeType *leaf;
|
RBNodeType *leaf; // 表示NIL的叶子节点
|
||||||
} RBTreeType;
|
} RBTreeType;
|
||||||
|
|
||||||
void TestRBTree(void);
|
// 先序遍历红黑树,输出节点的键值和颜色
|
||||||
|
|
||||||
void RBTreeTraversal(RBTreeType *tree, RBNodeType *node);
|
void RBTreeTraversal(RBTreeType *tree, RBNodeType *node);
|
||||||
|
|
||||||
|
// 左旋转操作
|
||||||
void RBTreeLeftRotate(RBTreeType *tree, RBNodeType *current_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