我想用我的AVLTree做一個LeftRotation
。我會插入3,5和10,所以它變成了一棵退化的樹。當我遍歷它會給我3, 5, 10
,但是當我做輪換時,我只是得到5, 10
而不是預期的5, 3, 10
。C++ AVLTree旋轉
這與設置a
爲b
的left
分支有關。我會穿過它,我的樹的根將是5
,左邊是3
,右邊是10
,但是當我去遍歷它時顯示左邊爲null
。
這裏是我的輪換代碼:
void AVLTree::RotateLeft(Node *root)
{
Node a = *root;
Node b = *root->GetRight();
*root = b;
a.SetRight(b.GetLeft());
b.SetLeft(&a); //This is where the problem occurs
}
而且我Traversal
代碼:
void AVLTree::Traverse(Node *node)
{
cout << node->GetValue() << ", ";
if (node->GetLeft() != nullptr)
Traverse(node->GetLeft());
if (node->GetRight() != nullptr)
Traverse(node->GetRight());
}
提前感謝!
編輯:更改全部0
的爲nullptr
,感謝您的更正!
只要使用C++ 11標準,請使用'nullptr'。有關更多詳細信息:[什麼是nullptr?](http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr)。如果不是,那麼使用'NULL'宏更好。很可能比較指針爲零將成本點。 –
看來你想要做'b.SetLeft(a)',而不是'&a'。 'SetLeft'需要一個'Node',而不是'Node *'。如果可能的話,你還應該在你的程序中交換'Node&'的所有'Node *',因爲你正在使用指針,就像它們是引用一樣... – Massa
@ user3280133問題是否已解決? –