我在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。
有关可能发生的事情的任何想法?谢谢!
答案 0 :(得分:4)
基于代码段很难分辨,但localRoot
是一个本地指针,当你离开函数时,它的变化就会被遗忘。如果要在调用函数的上下文中更改它,您可能希望将其作为RedBlackNode*&
传递,或者您应该返回值作为结果。