- 새로운 수를 삽입함에 있어, 기존 노드의 위치를 변경 하지 않는다.
=> 작은 수는 좌측 큰 수는 오른쪽 서브트리에 존재한다 점을 이용하여, 비교 & 삽입하면 된다.


T는 Binary search Tree // z는 삽입 할 노드를 의미.
X는 트리의 루트에서 시작하고, Y는 항상 X의 뒤에 있기에 NULL로 시작
X = NULL이 될 때까지 루프를 돌린다. (= Y는 X의 뒤에 있기에, X가 NULL이 되면 Y의 자식의 위치에 Z를 삽입한다는 개념)
Z값과 X값을 비교하여 크면 오른쪽, 작으면 좌측으로 이동 => 아래로.
P[Z] <- Y는 삽입 할 Z의 부모가 Y라고 포인팅.
IF Y = NULL 이라는 말은, X의 이동이 없다는 의미 즉, 트리가 비어있다.
그런경우, 트리의 루트 노드에 Z를 삽입하고
그렇지 않은 경우, 작으면 Y의 왼쪽, 크면 오른쪽에 Z를 삽입하고 마무리.
'시간 복잡도 = O(h)'
- 삭제는 사전작업으로 검색을 수반한다.
- 삭제 카테고리에서는 오로지 삭제만을 다뤄 보려 한다.
- 삭제를 위한 방법론은 3가지로 분류해서 일반적으로 접근한다.


Y != Z라는 말은 자식노드가 2개, 즉 CASE 3를 의미한다.
- 이 경우 Successor의 값을 z의 자리로 이동.
시간 복잡도 : O(h) 이지만, 트리의 높이가 O(n) 인 최악의 경우가 존재.