트리란 연결 리스트와 유사한 자료구조지만 연결 리스트가 단순히 다음 노드를 가르키는 선형이라면
트리는 각 노드가 여러개의 노드를 가르키는 비선형이다.
트리 구조는 그래프의 한 종류로 1개 이상의 노드로 구성되며 사이클이 없는 그래프로
임의의 두 노드간에 하나의 경로만이 존재한다.
degree는 특정 노드의 자식 수라고 부르며 트리의 모든 노드 중에
가장 높은 차수를 트리의 차수라고 한다.depth는 root에서 해당 노드까지 경로의 길이이다.height는 해당 노드에서 가장 깊은 노드까지 경로의 길이( 하나의 노드를 가진 트리의 높이는 0)level은 루트 노드 아래로 한단계식 레벨을 가지며 루트가 레벨 1 이 된다.
모든 노드들이 둘 이하의 자식을 가질 때 이진 트리라고 한다.
마지막 레벨까지 모든 노드가 있는 이진 트리
노드를 삽입할 때 왼쪽부터 차례대로 추가하는 이진 트리
각 부모노드의 값은 왼쪽 서브트리 값보다 크고 오른쪽 서브트리보다 작다.
==> 98. Validate Binary Search Tree ( 이진탐색 트리 확인 방법은 Inorder 순회로 줄 세워 봐서 값이 오름차순 정렬되어 있으면 Valid !)
높이가 h인 포화 이진 트리(full binary tree)는 2^h-1 개의 노드를 가진다.
노드가 N개인 포화(full) 혹은 완전(complete) 이진트리의 높이는 O(logN)이다.
노드가 N개인 이진트리의 높이는 최악의 경우 O(N)이 될 수 있다.
트리는 선형이 아닌 비선형이기 때문에 모든 노드들을 거쳐가기 위한 방법이 필요하다.
전위순회( Pre-order )

중위순회( In-order )

후위순회( Post-order )

레벨순회( Level-order )

포스팅 준비중
public class Node {
int value;
Node left, right;
public Node(int value) {
this.value = value;
}
}
public class BinaryTree {
// 레벨 순회
public void level_order(Node node) {
Queue<Node> que = new LinkedList<>();
que.offer(node);
while(!que.isEmpty()) {
Node cur = que.poll();
System.out.println(cur.value);
if(cur.left != null) que.offer(cur.left);
if(cur.right != null) que.offer(cur.right);
}
}
public void inorder(Node node) {
if(node == null) return;
inorder(node.left);
System.out.println(node.value);
inorder(node.right);
}
}
Reference
https://3dmpengines.tistory.com/423
https://blog.naver.com/muramura12/220704218849