C# 자료구조 트리(Tree)에 대해 알아보자

2024. 3. 26. 16:20· C#/자료구조 이해하기
목차
  1. 트리란?
  2. 이진 트리(Binary Tree)
  3. 트리 구현

트리란?

  • 트리는 비선형 자료구조이다. 비선형 자료구조란 배열, 리스트와 같이 인덱스(0,1,2,...)가 순서대로 나열된 선형 자료구조의 반대라고 생각하면 된다.
  • 계층모델이다.
  • 노드(node)들의 집합으로 구성되어 있다. 노드란 데이터를 일컫는다.
  • 각 노드는 하나의 부모 노드(루트 노드)와 여러 개의 자식 노드를 가질 수 있다.
  • 트리는 하나의 루트 노드에서 간선을 통해 다양한 노드를 방문, 탐색할 수 있는 구조를 가진다.

<출처: https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTWXmb%2Fbtro6bw9NVX%2FQlLNvnnxI7toaTGWHxz3B1%2Fimg.png>


이진 트리(Binary Tree)

<출처: https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkguql%2Fbtro9HvnEuD%2FYHIjSpakUgVGoOjJWzXWuk%2Fimg.png>

 

  • 컴퓨터에서 사용되는 데이터 구조의 하나로, 루트가 있는 트리 구조에서 어떤 노드의 자식의 수가 최대 2개를 넘지 않는 트리를 말한다.
  • 이진 트리의 순회: 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것이다.

1. 전위순회(Pre-order)

-루트 노드 - 왼쪽 서브 트리 전위 순회 - 오른쪽 서브트리 전위 순회.

-위 그림에서 전위순회를 하면 1-2-4-5-3-6-7 순으로 방문.

-루트에서 시작하여 트리를 구조적으로 탐색하는데 유용.

 

2. 중위순회(In-order)

-왼쪽 서브 트리 중위순회 - 루트 노드  - 오른쪽 서브트리 중위순회

-위 그림에서 중위순회를 하면 4-2-5-1-6-3-7 순으로 방문.

-이진 탐색 트리에서 노드들을 오름차순으로 방문하기 위해 주로 사용.

 

3. 후위순회(Post-order)

-왼쪽 서브트리 후위순회 - 오른쪽 서브트리 후위순회 - 루트 노드

-위 그림에서 후위순회를 하면 4-5-2-6-7-3-1 순으로 방문.

-루트 노드의 자식 노드들을 모두 방문한 후에 루트 노드를 처리하는데 사용. 트리의 삭제 연산 등에서 사용 가능.


트리 구현

  • 트리는 라이브러리에서 제공되지 않기 때문에 직접 구조를 구현해야 한다.
  • 다음은 위 그림의 이진 트리를 재귀함수를 사용하여 구조를 만들어주고,  전위, 중위, 후위 순회를 구현하는 코드이다.
public class TreeNode
    {
        public int Data;
        public TreeNode Left;
        public TreeNode Right;

        public TreeNode(int data)
        {
        	Data = data;
            Left = null;
            Right = null;
        }
    }
    void Start()
    {
        // 리스트를 사용하여 이진 트리 생성
        List<int> dataList = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
        TreeNode root = BinaryTree(dataList, 0);

        Debug.Log("전위 순회:");
        PreOrderTraversal(root);

        Debug.Log("중위 순회:");
        InOrderTraversal(root);

        Debug.Log("후위 순회:");
        PostOrderTraversal(root);
    }

    // 리스트의 데이터를 트리 구조로 변환.
    public TreeNode BinaryTree(List<int> dataList, int index)
    {
        if (index >= dataList.Count)
            return null;

        TreeNode node = new TreeNode(dataList[index]);

        node.Left = BinaryTree(dataList, 2 * index + 1);
        node.Right = BinaryTree(dataList, 2 * index + 2); 

        return node;
    }

    // 전위 순회
    public void PreOrderTraversal(TreeNode root)
    {
        if (root != null)
        {
            Debug.Log(root.Data);
            PreOrderTraversal(root.Left);
            PreOrderTraversal(root.Right);
        }
    }

    // 중위 순회
    public void InOrderTraversal(TreeNode root)
    {
        if (root != null)
        {
            InOrderTraversal(root.Left);
            Debug.Log(root.Data);
            InOrderTraversal(root.Right);
        }
    }

    // 후위 순회
    public void PostOrderTraversal(TreeNode root)
    {
        if (root != null)
        {
            PostOrderTraversal(root.Left);
            PostOrderTraversal(root.Right);
            Debug.Log(root.Data);
        }
    }


 

'C# > 자료구조 이해하기' 카테고리의 다른 글

C# 자료구조 그래프(Graph)에 대해 알아보자!  (0) 2024.03.26
C# 해시셋(HashSet)에 대해 알아보자!  (0) 2024.03.18
C# object 데이터 타입과 값, 참조 형식을 알아보자!  (0) 2024.03.13
C# 해시테이블(Hash table)에 대해 알아보자!  (0) 2024.03.13
C# 연결리스트(Linked List)에 대해 알아보자!  (0) 2024.03.13
  1. 트리란?
  2. 이진 트리(Binary Tree)
  3. 트리 구현
'C#/자료구조 이해하기' 카테고리의 다른 글
  • C# 자료구조 그래프(Graph)에 대해 알아보자!
  • C# 해시셋(HashSet)에 대해 알아보자!
  • C# object 데이터 타입과 값, 참조 형식을 알아보자!
  • C# 해시테이블(Hash table)에 대해 알아보자!
ForMan_
ForMan_
C# 언어로 프로그래머스 문제를 풀이하고, Unity 엔진으로 게임을 개발하며, 자료구조를 공부하는 과정을 반복문처럼 꾸준히 탐구하고 공유하는 '반복해서 노력하는 남자, ForMan'의 블로그입니다.
ForMan_
반복해서 노력하는 남자, ForMan
ForMan_
전체
오늘
어제
  • 분류 전체보기
    • C#
      • 프로그래머스 코딩 문제 풀이
      • 자료구조 이해하기
      • 알고리즘 기초 익히기
    • Unity
      • Unity 디자인 패턴
      • Unity 타워디펜스게임 프로젝트
      • Unity 물리기반 Merge게임 프로젝트(수박라..
      • Unity FPS게임 프로젝트(오버워치라이크)
    • UI
      • 젠레스존제로 UI작업 시작
      • 젠레스존제로 UI 이펙트 작업
      • 젠레스존제로 UI 사운드 작업
      • 젠레스존제로 UI 스크롤뷰 작업(메뉴창)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

최근 글

최근 댓글

인기 글

태그

  • 프로그래머스
  • 머쓱이
  • 오버워치
  • 유니티게임프로젝트
  • 완전탐색
  • 오름차순
  • 과일합치기
  • 타워디펜스게임
  • 유니티게임
  • 오버워치만들기
  • 게임프로젝트
  • 동적프로그래밍
  • 유니티디자인패턴
  • c#
  • 수박게임
  • 유니티
  • Unity
  • 코딩테스트
  • forman
  • 정렬알고리즘
Thanks for Skin
hELLO · Designed By 정상우.v4.2.2
ForMan_
C# 자료구조 트리(Tree)에 대해 알아보자
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.