├── RB_Tree.cpp ├── RB_Tree.h ├── RB_Tree_Node.cpp ├── RB_Tree_Node.h ├── README.md └── main.cpp /RB_Tree.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Neo-ZK/RB_Tree/3a4767ccb41e75ebbbba39aec226bc14b89b1f3a/RB_Tree.cpp -------------------------------------------------------------------------------- /RB_Tree.h: -------------------------------------------------------------------------------- 1 | #ifndef RB_TREE_H 2 | #define RB_TREE_H 3 | //#pragma once 4 | #include "RB_Tree_Node.h" 5 | #include "RB_Tree_Node.cpp" 6 | template 7 | class RB_Tree 8 | { 9 | public: 10 | RB_Tree(T Root_Data); 11 | ~RB_Tree(); 12 | void Left_Rotate(RB_Tree_Node* current_Node); 13 | void Right_Rotate(RB_Tree_Node* current_Node); 14 | void Insert_Node(T insert_data); 15 | int Delete_Node(T delete_data); 16 | void Fix_Tree(RB_Tree_Node* current_Node); 17 | void erase_Node(RB_Tree_Node* Node_del); 18 | void Fix_Tree_Delete(RB_Tree_Node* current_Node); 19 | RB_Tree_Node* Find_Successor_Node(RB_Tree_Node* current_Node); 20 | RB_Tree_Node* Root_Node; 21 | }; 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /RB_Tree_Node.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | #include "RB_Tree_Node.h" 3 | 4 | template 5 | RB_Tree_Node::RB_Tree_Node(T data_in):data(data_in),color_tag(0),Left_child(NULL),Right_child(NULL),Father_Node(NULL) 6 | { 7 | data = data_in; 8 | color_tag = 1; 9 | } 10 | 11 | template 12 | RB_Tree_Node::~RB_Tree_Node(void) 13 | { 14 | } 15 | -------------------------------------------------------------------------------- /RB_Tree_Node.h: -------------------------------------------------------------------------------- 1 | #ifndef RB_TREE_NODE_H 2 | #define RB_TREE_NODE_H 3 | //#pragma once 4 | #include "stdafx.h" 5 | template 6 | class RB_Tree_Node 7 | { 8 | public: 9 | RB_Tree_Node(T data_in); 10 | ~RB_Tree_Node(void); 11 | RB_Tree_Node* Left_child; 12 | RB_Tree_Node* Right_child; 13 | RB_Tree_Node* Father_Node; 14 | T data; 15 | int color_tag; //1±íʾºìÉ« 0±íʾºÚÉ« 16 | }; 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RB_Tree 2 | 红黑树的c++实现 3 | ---------------------------------------------------- 4 | 5 | 网上比较难找到红黑树的完整实现,很多时候只有算法和子函数的一些编写,并没有将各种情况写出来(比如没有考虑当前节点是否有叔叔节点,祖父节点等,只给出简短 6 | 的伪代码),这段代码是红黑树的完整实现,并用模板编写,整个红黑树封装在RB_Tree类中,具体实现代码在RB_Tree\RB_Tree\RB_Tree.cpp中。 7 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Neo-ZK/RB_Tree/3a4767ccb41e75ebbbba39aec226bc14b89b1f3a/main.cpp --------------------------------------------------------------------------------