AVLTree로 LeftRotation
을 수행하려고합니다. 3, 5, 10을 삽입하여 퇴화 된 나무가됩니다. 내가 트래버스 할 때 3, 5, 10
을 주겠지 만 회전을 할 때 나는 단지 5, 10
대신에 5, 3, 10
을 얻습니다.C++ AVLTree Rotation
a
을 의 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' 매크로를 사용하는 것이 훨씬 낫습니다. 0에 대한 포인터를 비용 포인트로 비교할 가능성이 큽니다. –
'& a'가 아니라'b.SetLeft (a)'를하고 싶을 것 같습니다. 'SetLeft'는'Node'가 아니라'Node'를 취합니다. 가능하다면 포인터를 참조처럼 사용하기 때문에 프로그램에서'Node &'에 대해'Node *'를 모두 교환해야합니다 ... – Massa
@ user3280133 문제가 해결 되었습니까? –