Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1072527
  • 博文数量: 165
  • 博客积分: 3900
  • 博客等级: 中校
  • 技术积分: 1887
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:15
文章分类

全部博文(165)

文章存档

2020年(3)

2019年(8)

2017年(2)

2016年(8)

2015年(14)

2013年(15)

2012年(32)

2011年(11)

2010年(14)

2009年(7)

2008年(20)

2007年(31)

分类: C/C++

2013-07-07 09:30:04

main.cpp:
#gcc main.cpp rbtree.cpp rbtree.h
#./a.out

#include
#include
#include "rbtree.h"


struct my_node {
int data;
struct rb_node node;
};
struct rb_root groot=RB_ROOT;


void rb_traverse(struct rb_root *root)
{
struct my_node *entry;
struct rb_node *n;
for(n = rb_first(root);n;n=rb_next(n))
{
entry = rb_entry(n, struct my_node, node);
printf("%d--", entry->data);
}
}
void rb_add(struct rb_root *root, int data)
{
struct rb_node **p=&(root->rb_node);
struct rb_node *parent = NULL;
struct my_node *entry;
struct my_node *new_node=(struct my_node*)malloc(sizeof(struct my_node));
rb_init_node(&(new_node->node));
new_node->data = data;
while(*p)
{
parent = *p;
entry = rb_entry(parent, struct my_node,node);
if(entry->data > data)
p=&((*p)->rb_left);
else if (entry->data < data)
p=&((*p)->rb_right);
else
printf("node already exist\n");
}
rb_link_node(&new_node->node, parent, p);
rb_insert_color(&new_node->node, root);


}
int main()
{
int i;
for(i=20;i>10;i--)
rb_add(&groot, i);
for(i=10;i>0;i--)
rb_add(&groot, i);
for(i=30;i>20;i--)
rb_add(&groot, i);
rb_traverse(&groot);
return 0;
}
阅读(868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~