Post

[C++ / Algorithm] 트리 #8

1. 트리란?

트리 자료구조는 노드들이 나뭇가지처럼 연결된 비선형 자료구조입니다.
맨 위에 있는 루트 노드를 기준으로 뻗어나가는 노드들이 각각의 노드를 가지고 있는 계층형 구조이기도 합니다.
컴퓨터의 폴더 구조가 트리와 매우 유사하다는 점이 있습니다.


2. 트리 자료구조에서 사용되는 용어

2-1. 노드

노드는 트리를 구성하고 있는 기본적인 요소로 노드와 노드가 연결되어 트리가 완성됩니다.


2-2. 간선

노드와 노드를 이어주는 선입니다.


2-3. 루트 노드

루트 노드는 트리의 최상단에 있는 노드로 루트 노드는 부모 노드가 없다는 특징이 있습니다.


2-4. 부모 노드

부모 노드는 자식 노드을 가지는 노드를 의미합니다.


2-5. 자식 노드

자식 노드는 부모 노드의 하위 노드를 의미합니다.


2-6. 단말 노드

단말 노드는 자식 노드가 없는 노드를 의미합니다.


3. 이진 트리란?

이진 트리는 각각의 노드들이 가지는 자식 노드가 2개 이하인 경우를 이진 트리라고 합니다.


4. C++에서의 이진 트리

이진 트리는 C++에서 아래와 같이 만들어서 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <memory>

using namespace std;

template <typename T>
class Node {
public: 
    T data;
    unique_ptr<Node> left;
    unique_ptr<Node> right;
    
    Node(T data) {
        this->data = data;
    }
};

template <typename T>
class Tree {
public:
    unique_ptr<Node<T>> root;

    void addNode(unique_ptr<Node<T>>& current, T data) {
        if (current->left == nullptr) {
            current->left = make_unique<Node<T>>(data);
            return;
        }
        if (current->right == nullptr) {
            current->right = make_unique<Node<T>>(data);
            return;
        }
        
        if (current->left != nullptr) addNode(current->left, data);
        if (current->right != nullptr) addNode(current->right, data);
    }
    
    Tree(T data) {
        this->root = make_unique<Node<T>>(data);
    }
};

int main() {
    Tree tree(3);
    
    tree.addNode(tree.root, 2);
    
    cout << tree.root->left->data;
}
1
2

트리 구조를 C++에서 구현한 모습입니다.

This post is licensed under CC BY 4.0 by the author.