티스토리 뷰

전공/컴퓨터 코딩 데이터

AVL 트리 정리

흔한 학생 2024. 12. 12. 20:51

 

rotate_right 함수

AVLNode *rotate_right(AVLNode *parent)
{
	AVLNode* child = parent->left;
	parent->left = child->right;
	child->right = parent;

	// 새로운 루트를 반환
	return child;
}

parent의 left를 child라 명한다. 
child의 right를 parent의 left로 이동시킨다.
child의 right로 parent를 이동시킨다.
회전된 child 노드를 반환한다.

마지막 부분을 보면 child->right = parent;
기존의 child가 parent 자리로 가고 parent가 child의 오른쪽으로 가야하기에 이해가 쉬움
하지만 왜 parent->left = child->right; 인가?
child의 오른쪽에 parent가 들어간다면 기존에 있던 child의 오른쪽 부분은 parent에 연결해야하기 때문
이진탐색트리의 특성때문에 해당 부분은 parent의 왼쪽에 연결해야함. 

적용예시 및 해설

LL에서 X노드가 parent, Y노드가 child 이다. 

RL에서 하단부를 회전시킨다.
parent 는 Y노드, child는 J 노드가 된다.
J노드의 right를 Y노드의 left에 연결한다.
J노드의 right에 Y노드를 연결한다. 

 

rotate_left 함수

AVLNode *rotate_left(AVLNode *parent)
{
	AVLNode *child = parent->right;
	parent->right = child->left;
	child->left = parent;

	// 새로운 루트 반환
	return child;
}

parent의 right를 child라 명한다. 
child의 left를 parent의 right로 이동시킨다.
child의 left로 parent를 이동시킨다.
회전된 child 노드를 반환한다.

적용예시 및 해설

RR에서 X노드가 parent, Y노드가 child 이다. 

LR에서 하단부를 회전시킨다.
parent 는 Y노드, child는 J 노드가 된다.
J노드의 left를 Y노드의 right에 연결한다.
J노드의 left에 Y노드를 연결한다. 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함