2021.11.30 TIL

서승원·2021년 11월 30일
0

TIL

목록 보기
28/68

Tree 구조 객체지향적 코드

tree 구조에 추가한 여러 기능들을 객체 지향적으로 만드는 과정이다.
1. add
가장 단순히 배치 원칙에 따라 data를 입력하는 add 함수를 Tree class에 맞춰 static 한 method를 이용해서 tree.add2( data ) 로 바꿔 사용했다.

2.print
Node들을 재귀호출을 이용한 print로 depth 변수를 추가해 출력해내던 함수를 이용해서, 매개변수가 없이 print( root , 0 ) 을 기본값으로 사용해 root부터 끝 depth까지 출력해내도록 tree.print2() 로 사용한다.


RotationR/L 먼저 Rotation의 방향에 대해서 보면

다음과 같이 회전 방향과 반대쪽에 연결된 노드가 해당 매개변수가 되는 노드의 자리로 오게되고, 아래쪽으로 내려가는 노드는 원래 가진 반대쪽의 연결 노드는 유지하고, 자리가 바뀐 노드의 가까운쪽 노드를 가져가게 된다. 이를 객체 지향적으로 만들기 위해서는 위치가 변경되는 두 노드의 포인터를 이용할 필요가 있다.

가장 먼저 언급한 두 포인터를 이용하기 위해 parent, child 두 Node를 갖는 Family 라는 class를 선언한다.

Family class를 이용해서 두 Node가 이동할 방향을 설정해줄 findFamily 함수를 설정한다. Family class가 함수 안에서 선언되고, 매개변수인 p,n 두 노드를 포함하게된다. data는 n노드가 갖는 data 값으로, n 노드를 Rotation 동작의 기준으로 본다.
RotationR2를 정의한다. data 값을 입력하면, findFamily 함수를 통해 data값을 통해서 p,n 두 노드의 포인터를 지정하게 되고, 해당 Node들이 left/right 포인터로 가리키는 자식Node가 있는지 없는지에 따라서 회전 방향과 다른 Node들과의 연결 상태를 결정짓게 된다.
data에 5를 입력한 결과로, 그림과 같은 결과가 출력된다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글