|
|
|
|
#pragma once
|
|
|
|
|
#define RED 0 // <20><>ɫ<EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
#define BLACK 1 // <20><>ɫ<EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
#include "List.h"
|
|
|
|
|
|
|
|
|
|
typedef struct RBleaf {
|
|
|
|
|
int hashfile;
|
|
|
|
|
char filename[50];
|
|
|
|
|
LinkList index;
|
|
|
|
|
}RBleaf;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<C4BD>
|
|
|
|
|
typedef struct RBTreeNode {
|
|
|
|
|
unsigned char color; // <20><>ɫ(RED <20><> BLACK)
|
|
|
|
|
RBleaf key; // <20>ؼ<EFBFBD><D8BC><EFBFBD>(<28><>ֵ)
|
|
|
|
|
struct RBTreeNode *left; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
struct RBTreeNode *right; // <20>Һ<EFBFBD><D2BA><EFBFBD>
|
|
|
|
|
struct RBTreeNode *parent; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}Node, *RBTree;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>
|
|
|
|
|
typedef struct rb_root {
|
|
|
|
|
Node *node;
|
|
|
|
|
}RBRoot;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>"<22><>
|
|
|
|
|
RBRoot* create_rbtree();
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ٺ<EFBFBD><D9BA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void destroy_rbtree(RBRoot *root);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʧ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>-1<><31>
|
|
|
|
|
int insert_rbtree(RBRoot *root, RBleaf key);
|
|
|
|
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(keyΪ<79>ڵ<EFBFBD><DAB5><EFBFBD>ֵ)
|
|
|
|
|
void delete_rbtree(RBRoot *root, RBleaf key);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
|
|
|
|
void inorder_rbtree(RBRoot *root);
|
|
|
|
|
|
|
|
|
|
// (<28>ݹ<EFBFBD>ʵ<EFBFBD><CAB5>)<29><><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>м<EFBFBD>ֵΪkey<65>Ľڵ㡣<DAB5>ҵ<EFBFBD><D2B5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2A3ACB7><EFBFBD>-1<><31>
|
|
|
|
|
RBleaf* rbtree_search(RBRoot *root, int hashkey);
|
|
|
|
|
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void print_rbtree(RBRoot *root);
|