首页 > 其他 > 详细

Treap

时间:2015-03-27 23:39:16      阅读:222      评论:0      收藏:0      [点我收藏+]
 1 struct treap_node {
 2     treap_node *left, *right;
 3     int value, fix;
 4 };
 5 void treap_left_rotate(treap_node *&a) {
 6     treap_node *b = a->right;
 7     a->right = b->left;
 8     b->left = a;
 9     a = b;
10 }
11 void treap_right_rotate(treap_node *&a) {
12     treap_node *b = a->left;
13     a->left = b->right;
14     b->right = a;
15     a = b;
16 }
17 void treap_insert(treap_node *&a, int value) {
18     if(a == NULL) {
19         a = new treap_node;
20         a->value = value;
21         a->fix = rand();
22         a->left = a->right = NULL;
23     } else if(value < a->value) {
24         treap_insert(a->left, value);
25         if(a->left->fix < a->fix) treap_right_rotate(a);
26     } else {
27         treap_insert(a->right, value);
28         if(a->right->fix < a->fix) treap_left_rotate(a);
29     }
30 }
31 void treap_delete(treap_node *&a, int value) {
32     if(value == a->value) {
33         if(!a->left || !a->right) {
34             treap_node *t = a;
35             if(!a->left) a = a->right;
36             else a = a->left;
37             delete t;
38         } else {
39             if(a->left->fix < a->right->fix) {
40                 treap_right_rotate(a);
41                 treap_delete(a->right, value);
42             } else {
43                 treap_left_rotate(a);
44                 treap_delete(a->left, value);
45             }
46         }
47     } else {
48         if(value < a->value) treap_delete(a->left, value);
49         else treap_delete(a->right, value);
50     }
51 }

 

Treap

原文:http://www.cnblogs.com/mitrenick/p/4373118.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!