본문 바로가기

Programming/DS SorceCode

스레드 이진트리(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