계층적 관계를 표현하는 비선형적 자료구조
각 노드가 왼쪽 자식과 오른쪽 자식 둘을 갖는 트리
1) 인접 배열 구현 : 2차원 배열(이진트리) - int[N][2]
말단 노드[-1]
- 2차원 배열로 구현시 메모리 효율↓, 탐색량↑
2) 인접 리스트 구현 : 리스트는 가변적이기 때문에 탐색이 효율적
부모, 자식 구분할 수 없을 때 양방향 노드
1) 전위순회(Preorder) : 출발하기 직전 부모 노드 방문
노드 방문 -> 왼쪽 자식 -> 오른쪽 자식
2) 중위순회(inorder) : 가는 도중 부모 노드 방문
왼쪽 자식 -> 노드 방문 -> 오른쪽 자식 (자식 노드 먼저 출력)
3) 후위순회(postorder) : 돌아온 후 부모 노드 방문
왼쪽 자식 -> 오른쪽 자식 -> (돌아와 노드 방문)
DFS 구현
while - iterative
재귀 - recursive
루트에서 아래쪽 레벨로 내려가는 노드가 빠짐없이 채워져 있고,
또 같은 레벨에서 왼쪽에서 오른쪽으로 노드가 빠짐없이 채워져 있는 이진트리(마지막 제외)
- 마지막 레벨을 제외한 레벨은 노드를 빠짐없이 가득 채운다.
- 마지막 레벨은 왼쪽부터 오른쪽 방향으로 노드를 빠짐없이 가득 채우되 끝까지 채울 필요 없다
마지막 레벨이 아니면 노드를 가득 채움
1) 루트 없는 트리, 루트를 1로 가정
2) ArrayList<>[] 탐색 - 재귀(DFS),스택(DFS),큐(BFS)
3) ArrayList 인접 리스트 N개
4) 부모 자식을 모르기 때문에 양방향으로 값 넣어주기
5) isVisited = true/false