"균형"을 정의하는 방법에는 여러 가지가 있습니다. 주요 목표는 모든 노드의 깊이를 O(log(n))
.
말씀하신 균형 조건은 AVL 트리에 대한 것 같습니다 .
다음은 AVL 트리의 균형 조건에 대한 공식적인 정의입니다 .
AVL의 모든 노드에서 왼쪽 하위 트리 의 높이는 오른쪽 하위 트리의 높이 에서 최대 1 만큼 다릅니다 .
다음 질문, " 높이 "는 무엇입니까?
이진 트리에서 노드 의 " 높이 "는 해당 노드에서 리프까지 가장 긴 경로의 길이입니다.
이상하지만 일반적인 경우가 하나 있습니다.
사람들은 빈 나무의 높이를 (-1)
.
예를 들어 루트의 왼쪽 자식은 null
다음과 같습니다.
A (Height = 2)
/ \
(height =-1) B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
\
C (Height = 0)
결정할 두 가지 예 :
예, 균형 잡힌 트리 예 :
A (h=3)
/ \
B(h=1) C (h=2)
/ / \
D (h=0) E(h=0) F (h=1)
/
G (h=0)
아니요, 균형 잡힌 트리가 아닙니다 .
A (h=3)
/ \
B(h=0) C (h=2) <-- Unbalanced: 2-0 =2 > 1
/ \
E(h=1) F (h=0)
/ \
H (h=0) G (h=0)