我正在用C ++实现一棵红黑树,但是我的旋转方法遇到了麻烦。 insert方法在没有任何平衡的情况下也可以正常工作,但是一旦我尝试旋转,我的树就会丢失信息。我的猜测是,我没有以正确的方式设置指向节点的指针,但我不太了解这里到底出了什么问题。
这是我向右旋转的方法:
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。
有什么想法可能会发生什么?谢谢!
最佳答案
很难根据代码段来区分,但是localRoot
是一个本地指针,当您离开函数时,其更改会被忘记。如果要在调用函数的上下文中对其进行更改,则可以将其作为RedBlackNode*&
传递,或者应将值作为结果返回。
关于c++ - 红黑树-旋转方法实现-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13849570/