CH8-3 이진트리의 순회(3)

08-3. 이진 트리의 순회(Traversal) ③

이번시간에는 전위순회와 후위 순회를 배우겠다.

사실 중위순회만 알면 전위순회와 후위순회는 바로 알 수 있다.

Untitled

Untitled

Untitled

이렇게 함수의 호출순서만 바뀌면 전위, 후위순회가 된다…

CH8-3 이진트리의 순회(4)

08-3. 이진 트리의 순회(Traversal) ④

C에서 배운 함수포인터를 여기서 활용해보자…

앞서 배운 전위,후위,중위순회를 함수포인터를 이용해 하나의 함수에서 활용가능하게 만들자.

typedef void (*VisitFunPtr)(BTData data);

헤더에 이런 시그니처를 만든다. 이때 C강의에서 배웠던 것 처럼 함수명에 포인터 연산자 없이도 동작은 된다. 나는 가시성을 위해 포인터연산자를 넣었다.

이렇게 typedef로 선언하면 앞으로 VisitFunPrt이라는 이름을 해당 반환타입과 입력타입을 가진 함수들의 범용적인 포인터 변수로 활용가능해진다.

그리고 헤더에 있는 중위, 전위, 후위순회의 함수들의 매개변수를 다음과 같이 만들자.

void InorderTraverse(BTreeNode* bt, VisitFunPtr action); //중위순회
void PreorderTraverse(BTreeNode* bt, VisitFunPtr action); // 전위순회
void PostorderTraverse(BTreeNode* bt, VisitFunPtr action); // 후위순회