Study with Me!
Seongmo
Study with Me!
전체 방문자
오늘
어제
  • Computer (126)
    • Computer Science (61)
      • Data Structure (51)
      • Algorithm (6)
      • 선형대수 with C++ (4)
    • Arm Architecture (1)
      • Register (0)
      • Assembly Instruction (1)
    • Linux (30)
      • Linux Kernel (4)
      • 라이브러리 함수 구현하기 (0)
      • 쉘, 쉘 명령어 구현하기 (15)
      • Ubuntu (11)
    • AWS (3)
    • Baekjoon (18)
    • Tools (6)
      • Git & Github (5)
      • Vim (1)
    • 개발 환경 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • STL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Study with Me!

Seongmo

6-4. [C++] 연결 리스트로 구현한 이진 트리
Computer Science/Data Structure

6-4. [C++] 연결 리스트로 구현한 이진 트리

2023. 7. 24. 03:44

앞서 다뤘던 이진 트리의 ADT를 이용해 정수(int)를 저장하는 이진 트리의 UML 다이어그램을 구성해보자.

이진 트리의 노드를 구현한 BinaryNode 클래스를 만들고,

이진 트리를 구현한 BinaryTree 클래스에서는 노드 클래스를 사용할 것이다.

BinaryNode 클래스를 먼저 구현해보자.

// BinaryNode.h
#include <iostream>

class BinaryNode {
protected:
    int data;
    BinaryNode *left;
    BinaryNode *right;

public:
    BinaryNode(int data = 0, BinaryNode *left = NULL, BinaryNode *right = NULL)
        : data(data), left(left), right(right) {}

    void setData(int data) { this->data = data; }
    void setLeft(BinaryNode *left) { this->left = left; }
    void setRight(BinaryNode *right) { this->right = right; }

    int getData() { return data; }
    BinaryNode *getLeft() { return left; }
    BinaryNode *getRight() { return right; }

    bool isLeaf() { return (left == NULL) && (right == NULL); }
};

BinaryNode 클래스를 사용해서 BinaryTree 클래스를 구현해보자.

(아직 미완성인 코드, 주석 처리된 부분은 뒤에서 자세히 다뤄보자.)

// BinaryTree.h
#include "BinaryNode.h"

class BinaryTree {
    BinaryNode *root;

public:
    BinaryTree() : root(NULL) {}

    void setRoot(BinaryNode *node) { root = node; }
    BinaryNode *getRoot() { return root; }

    bool isEmpty() { return (root == NULL); }

    // void preorder() {...}
    // void inorder() {...}
    // void postorder() {...}
    // void levelorder() {...}
    // void display() {
    //     preorder();
    //     inorder();
    //     postorder();
    //     levelorder();
    // }

    // int getCount() {...}
    // int getHeight() {...}
    // int getLeafCount() {...}
};

위에서 구현한 클래스를 이용해서 아래 사진의 이진 트리를 생성해보자.

// BinaryTree.cpp
#include "BinaryTree.h"

int main() {
    BinaryTree tree;

    BinaryNode *F = new BinaryNode(6, NULL, NULL);
    BinaryNode *E = new BinaryNode(5, NULL, NULL);
    BinaryNode *D = new BinaryNode(4, NULL, NULL);
    BinaryNode *C = new BinaryNode(3, F, NULL);
    BinaryNode *B = new BinaryNode(2, D, E);
    BinaryNode *A = new BinaryNode(1, B, C);

    tree.setRoot(A);

    return 0;
}

위 코드는 아래 이미지를 클릭해 깃허브에서도 확인할 수 있다.

깃허브 이미지 링크

저작자표시 (새창열림)

'Computer Science > Data Structure' 카테고리의 다른 글

6-6. [C++] 이진 트리의 연산 구현  (0) 2023.07.24
6-5. [C++] 이진 트리의 순회(전위/중위/후위/레벨 순회) 구현  (0) 2023.07.24
6-3. 이진 트리의 구현 방법  (0) 2023.07.24
6-2. 이진 트리란?  (0) 2023.07.24
6-1. 트리란?  (0) 2023.07.24
    'Computer Science/Data Structure' 카테고리의 다른 글
    • 6-6. [C++] 이진 트리의 연산 구현
    • 6-5. [C++] 이진 트리의 순회(전위/중위/후위/레벨 순회) 구현
    • 6-3. 이진 트리의 구현 방법
    • 6-2. 이진 트리란?
    Study with Me!
    Study with Me!
    Study with Me!

    티스토리툴바