728x90
[ 자료구조 ] level order iterative inorder tree traversal
1. 반복적 중위 탐색(inorder traversal) 알고리즘
트리 탐색을 꼭 순환 알고리즘으로 작성해야 하는 것은 아니다. 아래 예는 중위 탐색 알고리즘을 반복적인 알고리즘으로 작성한 것이다. 각 노드를 방문하면서 과거 노드를 LIFO 순으로 기억해야 하기 때문에 스택을 사용하였다.
void iter_inorder(tree_ptr node){
int top = -1;
tree_ptr stack[MAX_STACK_SIZE];
while(1){
while(node){
push(&top, node);
node = node->left_child;
}
node = pop(&top);
if(!node) break;
printf("%d", node->data);
node = node->right_child;
}
}
2. 레벨 탐색(level order traversal)
레벨 i를 탐색할 때 방문 노드의 자식 노드를 저장해둔 뒤 다음 레벨 i를 모두 방문하면 다음 방문자는 저장해둔 노드를 꺼내어 방문한다. 이때 저장해 둔 노드들은 먼저 저장된 노드를 먼저 꺼내어 방문한다. 즉 큐(FIFO) 자료구조를 사용한다.
void level_order(tree_ptr ptr){
int front = rear = 0;
tree_ptr queue[MAX_QUEUE_SIZE];
if(!ptr) return;
add(front, &rear, ptr);
for(;;){
ptr = delete(&front, rear);
if(ptr){
printf("%d", ptr->data);
if(ptr->left_child)
add(front, &rear, ptr->left_child);
if(ptr->right_child)
add(front, &rear, ptr->right_child);
}
else break;
}
}
728x90
'CS > 자료구조' 카테고리의 다른 글
[ 자료구조 ] inorder preorder postorder traversal 탐색 알고리즘 (0) | 2021.11.28 |
---|---|
[ 자료구조 ] Tree Linked List로 구현하기 (2) (0) | 2021.11.27 |
[ 자료구조 ] Tree Linked List로 구현하기 (1) (1) | 2021.11.26 |
[ 자료구조 ] Skewed 이진트리 포화 이진트리 완전 이진트리 (0) | 2021.11.25 |
[ 자료구조 ] 이진트리 Binary Tree (0) | 2021.11.24 |