#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
'Programming > DS SorceCode' 카테고리의 다른 글
BinaryTree : 이진트리 클래스 (0) | 2019.03.29 |
---|---|
BinaryNode.h : 이진 트리를 위한 노드 클래스 (0) | 2019.03.29 |
스레드 이진트리(Thread Binary Tree)를 위한 노드 클래스 (0) | 2019.03.25 |
BinaryNode.h : 이진 트리를 위한 노드 클래스 (0) | 2019.03.25 |
LinkedDeque.h : 연결된 덱 클래스 (0) | 2019.03.24 |