红黑树的实现源码
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-29
--------------------------------------------------------*/ static rb_node_t* rb_rotate_left(rb_node_t* node, rb_node_t* root) { rb_node_t* right = node->right; if ((node->right = right->left)) { right->left->parent = node; } right->left = node; if ((right->parent = node->parent)) { if (node == node->parent->right) { node->parent->right = right; } else { node->parent->left = right; } } else { root = right; } node->parent = right; return root; } /*----------------------------------------------------------- | node left | / \ / \ | left y ==> a node | / \ / \ | a b b y -----------------------------------------------------------*/ static rb_node_t* rb_rotate_right(rb_node_t* node, rb_node_t* root) { rb_node_t* left = node->left; if ((node->left = left->right)) { left->right->parent = node; } left->right = node; if ((left->parent = node->parent)) { if (node == node->parent->right) { node->parent->right = left; } else { node->parent->left = left; } } else { root = left; } node->parent = left; return root; } static rb_node_t* rb_insert_rebalance(rb_node_t *node, rb_node_t *root) { rb_node_t *parent, *gparent, *uncle, *tmp; while ((parent = node->parent) && parent->color == RED) { gparent = parent->parent; if (parent == gparent->left) { uncle = gparent->right; if (uncle && uncle->color == RED) { uncle->color = BLACK; parent->color = BLACK; gparent->color = RED; node = gparent; } else { if (parent->right == node) { root = rb_rotate_left(parent, root); tmp = parent; parent = node; node = tmp; } parent->color = BLACK; gparent->color = RED; root = rb_rotate_right(gparent, root); } } else { uncle = gparent->left; if (uncle && uncle->color == RED) { uncle->color = BLACK; parent->color = BLACK; gparent->color = RED; node = gparent; } else { if (parent->left == node) { root = rb_rotate_right(parent, root); tmp = parent; parent = node; node = tmp; } parent->color = BLACK; gparent-&g |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: C和C++语言学习总结(二)下一篇: C++指针和数组
关于红黑树的实现源码的所有评论