【发布时间】:2012-11-30 17:40:15
【问题描述】:
我正在用 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。
对可能发生的事情有任何想法吗?谢谢!
【问题讨论】:
-
我怀疑使用调试器可能会告诉你发生了什么......
-
你需要通过引用传递
localRoot指针,而不是通过值...最后一行没有效果! -
@Caribou 我知道 Visual Studio 有一个用于运行时错误的调试器。不幸的是,我无法访问视觉。知道任何具体会有所帮助的吗?我只是在使用文本编辑器和命令行。
-
@Jordy yes windbg (msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx) 或者如果您使用的是 cygwin - gdb
标签: c++ data-structures red-black-tree tree-balancing