主要实现如下功能
1.红黑树的前中后顺遍历
2.红黑树的创建
3.红黑树的销毁
4.查找"红黑树"中键值为key的节点(递归)
5.查找"红黑树"中键值为key的节点(非递归)
6.返回最小结点的值(将值保存到val中)
7.返回最大结点的值(将值保存到val中)
8.打印红黑树
9.将结点插入到红黑树中
10.删除结点
头文件
1 #ifndef _RBTREE_H_ 2 #define _RBTREE_H_ 3 4 #define RED 0 // 红色节点 5 #define BLACK 1 // 黑色节点 6 7 typedef int Type; 8 9 // 红黑树的节点 10 typedef struct RBTreeNode { 11 unsigned char color; // 颜色(RED 或 BLACK) 12 Type key; // 关键字(键值) 13 struct RBTreeNode* left; // 左孩子 14 struct RBTreeNode* right; // 右孩子 15 struct RBTreeNode* parent; // 父结点 16 }Node, * RBTree; 17 18 // 红黑树的根 19 typedef struct rb_root { 20 Node* node; 21 }RBRoot; 22 23 // 创建红黑树,返回"红黑树的根" 24 RBRoot* create_rbtree(); 25 26 // 将结点插入到红黑树中。插入成功,返回0;失败返回-1。 27 int insert_rbtree(RBRoot* root, Type key); 28 29 // 删除结点(key为节点的值) 30 void delete_rbtree(RBRoot* root, Type key); 31 32 33 // 前序遍历"红黑树" 34 void preorder_rbtree(RBRoot* root); 35 // 中序遍历"红黑树" 36 void inorder_rbtree(RBRoot* root); 37 // 后序遍历"红黑树" 38 void postorder_rbtree(RBRoot* root); 39 40 // 销毁红黑树 41 void destroy_rbtree(RBRoot* root); 42 43 // (递归实现)查找"红黑树"中键值为key的节点。找到的话,返回0;否则,返回-1。 44 int rbtree_search(RBRoot* root, Type key); 45 // (非递归实现)查找"红黑树"中键值为key的节点。找到的话,返回0;否则,返回-1。 46 int iterative_rbtree_search(RBRoot* root, Type key); 47 48 // 返回最小结点的值(将值保存到val中)。找到的话,返回0;否则返回-1。 49 int rbtree_minimum(RBRoot* root, int* val); 50 // 返回最大结点的值(将值保存到val中)。找到的话,返回0;否则返回-1。 51 int rbtree_maximum(RBRoot* root, int* val); 52 53 // 打印红黑树 54 void print_rbtree(RBRoot* root); 55 56 #endif