Data Structure

트리 (Tree)

studioesso 2020. 5. 5. 11:43

 

트리 종류

이진트리 : 각 노드가 최대 두 개의 자식을 갖는 트리

이진 탐색 트리 : '모든 왼쪽 자식들 <= n < 모든 오른쪽 자식들'의 속성을 갖는 이진트리

완전 이진트리 : 모든 높이에서 노드가 꽉 차 있는 이진 트리, 마지막 단계는 왼쪽에서 오른쪽으로 채워져야 한다.

전 이진 트리 : 모든 노드의 자식이 없거나 정확히 두 개 있는 트리.

포화 이진 트리 : 전 이진트리이면서 완전 이진트리인 경우를 말한다.

균형 트리 : 트리의 왼쪽과 오른쪽 부분이 어느 정도 균형이 잡혀있는 트리 (레드-블랙 트리, AVL 트리)

 

트리 순회

중위 순회 : 왼쪽 가지, 현재 노드, 오른쪽 가지 순서로 방문

전위 순회 : 현재 노드, 왼쪽 가지, 오른쪽 가지 순서로 방문

후위 순회 : 왼쪽 가지, 오른쪽 가지, 현재 노드 순서로 방문

 

/*
	코드 출처 : C언어로 쉽게 풀어쓴 자료구조 / 생능출판 / 천인국, 공용해, 하상호 지음 
*/
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

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

//중위 순회
void inorder(TreeNode *root) {
    if(root) {
    	inorder(root->left);
        printf("%d", root->data);
        inorder(root->right);
    }
}

//전위 순회
void preorder(TreeNode *root) {
    if(root) {
    	printf("%d", root->data);
        preorder(root->left);
        preorder(root->right);
    }
}

//후위 순회
void postorder(TreeNode *root) {
    if(root) {
    	postorder(root->left);
        postorder(root->right);
        printf("%d", root->data);
    }
}