스레드 트리
스레드의 개념
- 스레드 Thread : 특정 순회 방법에 따라 다음에 방문할 노드를 가리키는 포인터.
- 왼쪽 스레드 Left Thread : 순회 순서에서 그 노드의 선행 노드를 가리키는 포인터.
- 오른쪽 스레드 Right Thread : 순회 순서에서 그 노드의 후속 노드를 가리키는 포인터.
스레드 트리의 개념
- 정해진 순회 방법에 따른 방문 순서를 항상 유지하는
스레드
라는 포인터를 추가해 트리 순회를 편리하게 한 것 - 이진 트리의 경우 순회시 방문하지 않고 지나쳐 온 노드들을 스택에 저장하고 관리해야 하는 번거로움 발생함
- 그래서 잎 트리가 가지는 Null 을 가리키는 포인터를 활용하여 스레드 트리라는 것을 구현함
- 트리 순회의 효율성을 높이고, 추가적인 메모리 사용을 최소화 하는 목적.
스레드 트리는 순회 시 재귀 호출이나 스택을 사용하지 안혹도 모든 노드를 효율적으로 방문할 수 있도록 노드 간의 선호 관계를 연결한 자료구조이다.
스레드 트리의 구현
구분 | 포인터 추가 방식 | 빈 포인터 활용 방식 |
---|---|---|
구현 방법 | 노드 구조체에 왼쪽 및 오른쪽 스레드 포인터 필드 를 추가하여,각 노드가 다음에 방문할 노드를 가리키도록 한다. 메모리 사용량이 늘어나므로, 기억장소 부담이 커질 수 있다. |
기존 이진 트리의 노드 구조를 유지하면서 리프 노드의 빈 포인터를 활용해 스레드를 설정한다. 포인터가 스레드인지 실제 자식 노드를 가리키는지 구분을 위한 태그 필드가 필요. |
장점 | 스택 없이 트리에 속한 모든 노드 순회 가능 | 추가 기억장소 필요 없음 |
단점 | 스레드를 위한 추가 기억 장소 필요 |
스레드 트리의 연산
스레드 트리의 순회
패스
스레드 트리의 노드 삽입
패스
스레드 트리의 노드 삭제
패스