이진 탐색 트리(BST)의 발전된 형태로, 자녀 노드의 최대 개수를 원하는대로 결정할 수 있는 구조

자녀 노드의 최대 개수를 늘리기 위해 부모 노드에 key를 하나 이상 저장한다.
부모 노드의 key들을 오름차순으로 정렬한다.
정렬된 순서에 따라 자녀 노드들의 key값의 범위가 결정된다.
internal 노드의 key 수가 x개라면 자녀의 노드 수는 언제나 x + 1 이다.
따라서 최대 몇 개의 자녀 노드를 가질 것인지가 B tree를 사용할 때 중요한 파라미터가 됨!
M : 각 노드의 최대 자녀 노드 수M-1 : 각 노드가 가질 수 있는 최대 key 수「M/2¬ : 각 노드의 최소 자녀 노드 수(root노드와 leaf노드는 제외)「M/2¬-1 : 각 노드의 최소 key 수(root노드 제외)항상 leaf 노드에서 오름차순으로 하고 노드가 넘치면 가운데 key를 기준으로 좌우 key들은 분할하고 가운데 key는 부모노드로 승진한다.

모든 leaf 노드들이 같은 레벨에 있기 때문에 balanced tree라고 말할 수 있음.(BST같은 경우 자식들이 하나로만 뻗어 내려갈 수 있기 때문에 balanced tree는 아님)
B tree에서 검색할 때 평균과 최악의 경우 둘 다 O(logN)이기 때문에 일정한 성능을 낼 수 있음.
항상 leaf 노드에서 발생하고 삭제 후 최소 key 수보다 적어졌다면 재조정한다
* 「M/2¬-1 : 각 노드의 최소 key 수(root노드 제외)






: internal 노드에 있는 데이터를 삭제하려면 leaf노드에 있는 데이터와 위치를 바꾼 후 삭제.
어떤 leaf 노드의 데이터와 위치를 바꿔줄 것인지가 이슈.
=> 삭제할 데이터의 선임자나 후임자와 위치를 바꿔준다.(B tree의 특성을 해치지 않기 위함)
* 선임자 : predecessor, 나보다 작은 데이터들 중 가장 큰 데이터
* 후임자 : successor : 나보다 큰 데이터들 중 가장 작은 데이터
트리의 구조를 잘 생각해보면 선임자나 후임자는 항상 leaf노드에 있게 됨.
