'중위 순회'에 해당되는 글 1건

  1. 2020.12.17 이진 트리의 구현 및 순회

이진 트리

- 이진 트리는 포인터를 이용하여 구현하면 효과적인 데이터 관리가 가능

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

typedef struct {
    int data;
    struct Node *leftChild;
    struct Node *rightChild;
} Node;

Node* initNode(int data, Node* leftChid, Node* rightChild) {
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->leftChild = leftChid;
    node->rightChild = rightChild;
    return node;
}

 

이진 트리 순회

- 이진 트리에 담긴 데이터를 하나씩 방문하는 방법으로는 대표적으로 세 가지가 있음

 

1. 전위 순회

- 자기 자신을 출력

- 왼쪽 자식을 방문

- 오른쪽 자식을 방문

void preorder(Node* root) {
    if (root) {
        printf("%d ", root->data);
        preorder(root->leftChild);
        preorder(root->rightChild);
    }
}

 

2. 중위 순회

- 왼쪽 자식을 방문

- 자기 자신을 출력

- 오른쪽 자식을 방문

void inorder(Node* root) {
    if (root) {
        preorder(root->leftChild);
        printf("%d ", root->data);
        preorder(root->rightChild);
    }
}

 

3. 후위 순회

- 왼쪽 자식을 방문

- 오른쪽 자식을 방문

- 자기 자신을 출력

void postorder(Node* root) {
    if (root) {
        preorder(root->leftChild);
        preorder(root->rightChild);
        printf("%d ", root->data);
    }
}

 

* 이진 트리 사용해보기

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

typedef struct {
    int data;
    struct Node *leftChild;
    struct Node *rightChild;
} Node;

Node* initNode(int data, Node* leftChid, Node* rightChild) {
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->leftChild = leftChid;
    node->rightChild = rightChild;
    return node;
}

void preorder(Node* root) {
    if (root) {
        printf("%d ", root->data);
        preorder(root->leftChild);
        preorder(root->rightChild);
    }
}

void inorder(Node* root) {
    if (root) {
        preorder(root->leftChild);
        printf("%d ", root->data);
        preorder(root->rightChild);
    }
}

void postorder(Node* root) {
    if (root) {
        preorder(root->leftChild);
        preorder(root->rightChild);
        printf("%d ", root->data);
    }
}

int main(void) {
    Node* n7 = initNode(50, NULL, NULL);
    Node* n6 = initNode(37, NULL, NULL);
    Node* n5 = initNode(23, NULL, NULL);
    Node* n4 = initNode(5, NULL, NULL);
    Node* n3 = initNode(48, n6, n7);
    Node* n2 = initNode(17, n4, n5);
    Node* n1 = initNode(30, n2, n3);
    preorder(n1);
    printf("\n");
    inorder(n1);
    printf("\n");
    postorder(n1);
    system("pause");
    return 0;
}

'자료구조 알고리즘' 카테고리의 다른 글

순차 탐색과 이진 탐색  (0) 2020.12.17
우선순위 큐  (0) 2020.12.17
이진 트리의 개념  (0) 2020.12.17
기수 정렬  (0) 2020.12.17
계수 정렬  (0) 2020.12.17
Posted by khon98
,