0

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

这是我的向右旋转方法:

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。

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

4

1 回答 1

4

根据代码段很难判断,但localRoot它是一个本地指针,它的更改在您离开函数的那一刻就被遗忘了。如果你想在调用函数的上下文中改变它,你要么想要传递它,RedBlackNode*&要么应该返回值作为结果。

于 2012-12-12T22:16:28.377 回答