모든 노드를 낮은 레벨부터 차례대로 순회한다.

레벨 순서 순회는 너비 우선 순회(breadth-first traversal)라고도 한다.


1. 큐에 Root 노드를 put 한다.

2. 큐가 비어있지 않으면,

    2.1 큐에서 get() 하여, t 노드를 방문한다.

    2.2 t 노드의 왼쪽 자식이 있으면, 그것을 큐에 put 한다.

    2.3 t 노드의 오른쪽 자식이 있으면, 그것을 큐에 put 한다.


#include <stdio.h>
#include <malloc.h>

#define MAX 7

int tree[MAX];
int queue[MAX];

int front, rear;

int put(int data) {
    if (rear < MAX) {
        queue[rear++] = data;
        return data;
    }
    printf("Queue overflow\n");
    return -1;
}

int get() {
    if (front < MAX) {
        if (front < rear) {
            return queue[front++];
        }
        printf("There is no data in Queue\n");
    }
    else {
        printf("Queue overflow\n");
    }
    return -1;
}

void initTree() {
    for (int i = 0; i < MAX; ++i) {
        tree[i] = i + 'A';
    }
}

void visit(int idx) {
    printf("node %c \n", tree[idx]);
}

void levelorder_traversal(int idx) {
   
    put(idx);

    while (front != rear) {
        int t = get();
        visit(t);

        int left = t * 2 + 1;
        int right = t * 2 + 2;

        if (left < MAX) {
            put(left);
        }

        if (right < MAX) {
            put(right);
        }
    }
}
   
int main()
{
    //init Queue
    front = rear = 0;

    initTree();
    levelorder_traversal(0);

    return 0;
}



* Output

A → B → C → D → E → F → G


'SW > 알고리즘' 카테고리의 다른 글

Selection Sort  (0) 2019.05.11
Recursive Call - Factorial, Fibonacci, Hanoi Tower  (0) 2019.02.23
Tree Traversal3 - Postorder traversal  (0) 2019.02.23
Tree Traversal2 - Inorder traversal  (0) 2019.02.23
Tree Traversal1 - Preorder Traversal  (0) 2019.02.23

+ Recent posts