专栏首页高性能服务器开发001 红黑树(二)之 C语言的实现(3)

001 红黑树(二)之 C语言的实现(3)

红黑树的测试文件(rbtree_test.c):

 1/**
 2 * C语言实现的红黑树(Red Black Tree)
 3 *
 4 * @author skywang
 5 * @date 2013/11/18
 6 */
 7#include <stdio.h>
 8#include "rbtree.h"
 9#define CHECK_INSERT 0    // "插入"动作的检测开关(0,关闭;1,打开)
10#define CHECK_DELETE 0    // "删除"动作的检测开关(0,关闭;1,打开)
11#define LENGTH(a) ( (sizeof(a)) / (sizeof(a[0])) )
12void main()
13{
14    int a[] = {10, 40, 30, 60, 90, 70, 20, 50, 80};
15    int i, ilen=LENGTH(a);
16    RBRoot *root=NULL;
17    root = create_rbtree();
18    printf("== 原始数据: ");
19    for(i=0; i<ilen; i++)
20        printf("%d ", a[i]);
21    printf("\n");
22    for(i=0; i<ilen; i++)
23    {
24        insert_rbtree(root, a[i]);
25#if CHECK_INSERT
26        printf("== 添加节点: %d\n", a[i]);
27        printf("== 树的详细信息: \n");
28        print_rbtree(root);
29        printf("\n");
30#endif
31    }
32    printf("== 前序遍历: ");
33    preorder_rbtree(root);
34    printf("\n== 中序遍历: ");
35    inorder_rbtree(root);
36    printf("\n== 后序遍历: ");
37    postorder_rbtree(root);
38    printf("\n");
39    if (rbtree_minimum(root, &i)==0)
40        printf("== 最小值: %d\n", i);
41    if (rbtree_maximum(root, &i)==0)
42        printf("== 最大值: %d\n", i);
43    printf("== 树的详细信息: \n");
44    print_rbtree(root);
45    printf("\n");
46#if CHECK_DELETE
47    for(i=0; i<ilen; i++)
48    {
49        delete_rbtree(root, a[i]);
50        printf("== 删除节点: %d\n", a[i]);
51        if (root)
52        {
53            printf("== 树的详细信息: \n");
54            print_rbtree(root);
55            printf("\n");
56        }
57    }
58#endif
59    destroy_rbtree(root);
60}

红黑树的C测试程序

前面已经给出了红黑树的测试程序(rbtree_test.c),这里就不再重复说明。下面是测试程序的运行结果:

 1== 原始数据: 10 40 30 60 90 70 20 50 80 
 2== 前序遍历: 30 10 20 60 40 50 80 70 90 
 3== 中序遍历: 10 20 30 40 50 60 70 80 90 
 4== 后序遍历: 20 10 50 40 70 90 80 60 30 
 5== 最小值: 10
 6== 最大值: 90
 7== 树的详细信息: 
 830(B) is root
 910(B) is 30's   left child
1020(R) is 10's  right child
1160(R) is 30's  right child
1240(B) is 60's   left child
1350(R) is 40's  right child
1480(B) is 60's  right child
1570(R) is 80's   left child
1690(R) is 80's  right child

文章来源: http://www.cnblogs.com/skywang12345/p/3624177.html

欢迎关注公众号『easyserverdev』。如果有任何技术或者职业方面的问题需要我提供帮助,可通过这个公众号与我取得联系,同时,您也可以加入我的QQ群578019391。此公众号不仅分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题都可以在微信公众号直接留言或到群里提问,我会尽快回复您。

本文分享自微信公众号 - 高性能服务器开发(easyserverdev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一位资深程序员大牛给予Java初学者的学习路线建议

    很多人问我如何学习Java的?能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内...

    范蠡
  • 关于即时通信服务器架构的一些思考

    对于一个即时通信服务器来说,在用户量少的时候,一台服务器就足以提供所有的服务。而这种架构也最简单,举个例子,用户A与用户B互为好友,A向B发消息,服务器接收到消...

    范蠡
  • (一)Redis结构解析

    从今天起,本人将会展开对Redis源码的学习,Redis的代码规模比较小,非常适合学习,是一份非常不错的学习资料,数了一下大概100个文件左右的样子,用的是C...

    范蠡
  • machine learning笔记基础——线性代数基础

    对于复合的矩阵运算问题,和普通数字加减乘除是一样的,有括号先算括号,有乘除就算乘除,最后算加减。例如:

    阳光罗诺
  • Numpy库的学习(三)

    这里我们可以看到,我先打印了一下,np.arange(15)这个结果,产生一个0-14的15位数组

    用户2398817
  • Hacking Team被黑后续:攻击者浮出水面

    据FreeBuf报道,恶名昭著的间谍软件公司Hacking Team被黑客攻击,造成内部多达400GB的数据外泄。事件曝出后,Hacking Team建议在世...

    FB客服
  • 教程 | 基础入门:深度学习矩阵运算的概念和代码实现

    选自Medium 机器之心编译 参与:蒋思源 本文从向量的概念与运算扩展到矩阵运算的概念与代码实现,对机器学习或者是深度学习的入门者提供最基础,也是最实用的教...

    机器之心
  • SSH服务详解

    第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Wo...

    惨绿少年
  • 如何在CDH集群中部署Presto

    Fayson
  • 一次对支付宝木马的分析溯源之旅

    0x00 引子 与网络的黑暗面斗争中,我们看到太多的年轻人陷入黑产的陷井,少数人暴发横财及时收手还能全身而退,多数人身处产业链的底端所得不多却受牢狱之灾。年轻...

    FB客服

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动