이진 트리란 자식을 둘 이하 가진 트리이다.
오늘 면접에서 코드를 만들 때 둘 이상으로 만들었다...

위의 그림처럼
자식이 0, 1, 2까지는 모두 이진트리이고 자식이 3명이 되는 순간 이진트리가 아니다.



모든 노드가 0 또는 2개의 자식 노드를 갖는 트리

완전 이진 트리는 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 트리
마지막 레벨은 꽉 차 있지 않아도 되지만 노드가 왼쪽에서 오른쪽으로 채워져야 한다.

포화 이진 트리는 모든 내부 노드가 두 개의 자식 노드를 가지며 모든 잎 노드가 동일한 깊이 또는 레벨을 갖는다

균형 이진 트리는 왼쪽과 오른쪽 트리의 높이 차이가 모두 1만큼 나는 트리

모든 노드가 왼쪽에 있거나 오른쪽에만 있는 트리

모든 왼쪽 자식 노드는 부모 노드의 값보다 작고, 모든 오른쪽 자식 노드는 부모의 값보다 크며 값의 중복은 없다.

class Node {
int value;
Node leftChild;
Node rightChild;
public Node(int value) {
this.value = value;
this.leftChild = null;
this.rightChild = null;
}
}
위와 같이 노드를 데이터, 왼쪽 자식, 오른쪽 자식으로 구성할 수 있다.
class BinaryTree {
Node rootNode = null;
// 삽입
public void insertNode(int element) {
// 루트가 없는 경우
if (rootNode == null) {
rootNode = new Node(element);
} else {
Node head = rootNode;
Node currentNode;
while (true) {
currentNode = head;
// head보다 작기때문에 왼쪽으로 탐색
if (head.value > element) {
head = head.leftChild;
// 비어있으면 왼쪽 노드에 넣기
if (head == null) {
currentNode.leftChild = new Node(element);
break;
}
} else {
// 큰 경우 오른쪽 탐색
head = head.rightChild;
if (head == null) {
currentNode.rightChild = new Node(element);
break;
}
}
}
}
}
}