본문 바로가기
안 씀/자료구조-개념

이진 트리의 반복적 순회

by unhyepnhj 2024. 8. 19.

스택을 이용한 반복적 순회 구현

- 스택에 자식 노드들을 저장하고 꺼내면서 순회

- 순환 호출도 시스템 스택을 사용하고 있으므로 별도의 스택을 사용하면 순환 호출과 동일한 기능을 구현 가능

 

전체 프로그램

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef struct TreeNode {
	int data;
	struct TreeNode* left, * right;
} TreeNode;

#define SIZE 100
int top = -1;
TreeNode* stack[SIZE];

void push(TreeNode* p) {
	if (top < SIZE - 1)
		stack[++top] = p;
}

TreeNode* pop() {
	TreeNode* p = NULL;
	if (top >= 0) {
		p = stack[top--];
	}
	return p;
}

void inorder_iter(TreeNode* root) {
	while (1) {
		for (; root; root = root->left)
			push(root);
		root = pop();
		if (!root) break;
		printf("[%d] ", root->data);
		root = root->right;
	}
}

TreeNode n1 = { 1, NULL, NULL };
TreeNode n2 = { 4, &n1, NULL };
TreeNode n3 = { 16, NULL, NULL };
TreeNode n4 = { 25, NULL, NULL };
TreeNode n5 = { 20, &n3, &n4 };
TreeNode n6 = { 15, &n2, &n5 };
TreeNode* root = &n6;

int main(void) {
	printf("중위 순회=");
	inorder_iter(root);
	printf("\n");

	return 0;
}

>>

- 이진 트리의 왼쪽 노드들은 NULL 노드에 도달할 때까지 스택에 추가

- NULL 노드에 도달하면 스택에서 하나씩 삭제

- 다시 이 노드의 왼쪽 노드들을 NULL 노드에 도달할 때까지 스택에 추가

- 위 과정을 공백 스택이 될 때까지 반복

'안 씀 > 자료구조-개념' 카테고리의 다른 글

스레드 이진 트리  (0) 2024.08.19
이진 트리의 레벨 순회  (0) 2024.08.19
이진 트리의 순회  (0) 2024.08.19
이진 트리의 표현  (0) 2024.08.07
이진 트리  (0) 2024.07.23