红黑树 - 旋转方法实现 - C ++

时间:2012-12-12 22:11:30

标签: c++ data-structures red-black-tree tree-balancing

我在c ++中实现了一个Red-Black树,但是我的旋转方法遇到了问题。插入方法工作正常,没有任何平衡,但是一旦我尝试旋转,我的树就会丢失信息。我的猜测是我没有以正确的方式设置指向节点的指针,但我不太明白这里到底出了什么问题。

这是我的右旋方法:

void RedBlackTree::rotateRight(RedBlackNode *localRoot) {
cout << "rotateRight - local root " << localRoot->data << endl;
RedBlackNode *temp = localRoot->left;
localRoot->left = temp->right;
temp->right = localRoot;
localRoot = temp;
}

正在发生的事情的一个例子是我插入c,b和a。树最初看起来像这样:

    c
   /
  b
 /
a

旋转后,树只会打印出根节点c。

有关可能发生的事情的任何想法?谢谢!

1 个答案:

答案 0 :(得分:4)

基于代码段很难分辨,但localRoot是一个本地指针,当你离开函数时,它的变化就会被遗忘。如果要在调用函数的上下文中更改它,您可能希望将其作为RedBlackNode*&传递,或者您应该返回值作为结果。