主要实现如下功能

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
rbtree.h

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-22
  • 2022-01-06
  • 2021-10-24
  • 2022-01-18
  • 2021-12-01
猜你喜欢
  • 2022-12-23
  • 2021-08-12
  • 2022-12-23
  • 2021-10-25
  • 2022-12-23
  • 2022-12-23
  • 2021-12-09
相关资源
相似解决方案