我正在用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/

10-09 20:07