스레드 이진트리(Thread Binary Tree)를 위한 노드 클래스 ##뭔가 오류가 있음
#pragma once
#ifndef ___ThreadedBinTree
#define ___ThreadedBinTree
//스레드 이진트리(Thread Binary Tree)를 위한 노드 클래스
//스레드 이진 트리는 순회를 빠르게 하는 장점이 있으나 문제는 스레드를 설정하기 위하여 삽입이나 삭제 함수가 더 많은 일을 하여야 한다.
#include "ThreadedBinNode.h"
#include <cstdio>
class ThreadedBinTree {
ThreadedBinNode* root;
public:
ThreadedBinTree(): root(NULL) {}
void setRoot(ThreadedBinNode* node) { root = node; }
bool isEmpty() { return root = NULL; }
//스레드 방식의 inorder 방문 함수
void threadedInorder() {
if (!isEmpty()) {
printf("스레드 이진트리 : ");
ThreadedBinNode * q = root;
while (q->getLeft())
q = q->getLeft(); //가장 왼쪽노드로 이동
do {
printf("%c ", q->getData()); //데이터 출력
q = findSuccessor(q); //후속자 함수 호출
} while (q);
printf("\n");
}
}
//후속자 함수 호출
ThreadedBinNode* findSuccessor(ThreadedBinNode* p) {
ThreadedBinNode *q = p->getRight(); //오른쪽 자식 포인터
//만약 오른쪽 포인터가 NULL이거나 스레드이면 오른쪽 포인터를 반환
if (q == NULL || p->bThread) return q;
//만약 오른쪽 자식이면 다시 가장 왼족 노드로 이동
while (q->getLeft() != NULL) q = q->getLeft();
return q;
}
};
#endif // !___ThreadedBinTree