본문 바로가기

CS/자료구조

트리(Tree)

1. 트리란?

노드와 엣지로 이루어진  자료구조이다.

  • 사이클이 존재하지 않는다. 사이클이 존재한다면, 이는 그래프이다.
  • 모든 노드는 자료형으로 표현이 가능하다.
  • 루트에서 한 노드로 가는 경로는 유일하다.
  • 노드가 N개라면 간선은 N-1개이다.
  • 계층 구조가 확실한 구조에서 사용한다.

2. 트리 순회 방식

① 전위순회

부모-왼쪽 자식-오른쪽 자식 순으로 방문

void preOrder(int idx){
	if(tree[idx]){
    	cout<<tree[idx]<<' ';
        preOrder(idx*2);
        preOrder(idx*2+1);
    }
}

 

② 중위순회

왼쪽 자식-부모-오른쪽 자식 순으로 방문

void inOrder(int idx){
	if(tree[idx]){
        inOrder(idx*2);
        cout<<tree[idx]<<' ';
        inOrder(idx*2+1);
    }
}

 

③ 후위순회

왼쪽 자식-오른쪽 자식-부모 순으로 방문

void postOrder(int idx){
	if(tree[idx]){
        postOrder(idx*2);
        postOrder(idx*2+1);
        cout<<tree[idx]<<' ';
    }
}

이진트리로 디렉토리를 관리하고 있을 때 파일 탐색 시 사용하는 방식이다.

하위 디렉토리의 용량을 알고 있어야 하기 때문!

하위 서브트리 정보가 필요한 경우 후위순회를 사용한다.

 

④ 레벨순회

루트부터 레벨 순으로 방문(왼쪽-오른쪽)

'CS > 자료구조' 카테고리의 다른 글

해시(Hash)  (0) 2021.10.03
이진탐색트리(BST)  (0) 2021.10.03
힙(Heap)  (0) 2021.10.03
스택&큐  (0) 2021.10.03
Array vs ArrayList vs LinkedList  (0) 2021.10.03