트리 (Tree)

tree thumbnail.png
트리는 연결된 노드로 이루어진 계층적인 구조를 표현하는 가장 널리 사용되는 추상적인 자료 구조다. 각각의 노드는 많은 자식과 연결될 수 있지만 항상 하나의 부모만 가져야 한다.

그래프의 일종으로 한 노드에서 시작해서 자기 자신에게 돌아오는 순환이 없는 연결 그래프이다. 트리는 비선형적 계층 구조로 이루어져 있다. 마치 나무를 뒤집어 놓은 듯한 모양을 하고 있어 트리라고 부른다. 쉽게 컴퓨터의 폴더 구조를 생각하면 된다.

용어

특징

이진 트리 (Binary Tree)

자식 노드를 최대 2개까지만 가질 수 있는 트리이다.

이진 트리 종류

트리 순회

Tree Travasal.png

이진 탐색 트리 (Binary Search Tree, BST)

만약 BST가 포함된 문제가 나오면 보통 O(n)의 시간보다 빠르기를 기대한다.

시간 복잡도

동작 Big-O
접근 O(log(n))
검색 O(log(n))
삽입 O(log(n))
삭재 O(log(n))

일반적인 유형

많은 트리 문제에서는 일반적으로 다음과 같은 문제들에 대한 해결책을 요구한다.

기법

재귀 사용

재귀는 트리를 탐색을 위한 가장 일반적인 접근법이다. 만약 서브트리가 문제 전체를 풀 수 있다고 생각되면, 재귀를 사용해라.
재귀를 사용할 때는 항상 노드가 null인 경우에 대해서 생각해야 한다.

레벨 탐색

레벨 탐색을 사용하도록 요구되면 BFS를 사용할 수 있다.

필수 문제

추천 연습 문제


참조
Array cheatsheet for coding interviews | Tech Interview Handbook