균형 이진 트리와 이진 정렬 트리 사이에는 직접적인 관계가 없지만 이진 정렬 트리의 검색 효율성은 이진 트리의 모양과 관련이 있습니다. 따라서 이진 정렬 트리의 모양을 균일하게 만들고 싶을 때는 다음과 같습니다. 이진 트리를 균형 이진 트리라고 합니다.
1. 이진 정렬 트리
이진 정렬 트리(이진 정렬 트리), 이진 검색 트리(이진 검색 트리)라고도 함, 이포크라고도 함 검색 트리 .
이진 정렬 트리 정의:
이진 정렬 트리는 빈 트리이거나 다음 속성을 가진 이진 트리입니다.
왼쪽 하위 트리가 비어 있지 않으면 모든 왼쪽 하위 트리 값 노드의 값이 모두 해당 루트 노드의 값보다 작습니다.
오른쪽 하위 트리가 비어 있지 않으면 오른쪽 하위 트리의 모든 노드 값이 루트 노드의 값보다 큽니다. 왼쪽 및 오른쪽 하위 트리도 각각 두 개로 정렬된 트리입니다.
아래 그림과 같이 이진 정렬 트리입니다.
이진 정렬 트리에서 순차 순회를 수행하면 키워드별로 순차 정렬을 수행할 수 있습니다. 위 그림에서 순회는 10, 42, 45, 55, 58, 63, 67, 70, 83, 90, 98
이진 정렬 트리 검색 분석
을 얻을 수 있습니다. 검색의 평균 시간 성능 즉, 이진 정렬 트리에서의 검색은 이진 검색과 유사하지만 테이블의 순서를 유지한다는 측면에서 이동이 필요하지 않기 때문에 이진 정렬 트리가 더 효율적입니다. 삽입 및 삭제 작업을 완료하려면 노드만 수정하면 됩니다.
이진 정렬 트리 검색 최악의 경우 필요한 검색 시간은
트리의 깊이
에 따라 달라집니다.
이진 정렬 트리가 전체 이진 트리에 가까울 때 그 깊이는 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ n 최악의 경우 시나리오 log 2 아래 검색 시간 2. 균형 잡힌 이진 트리 위의 분석을 통해 이진 정렬 트리의 검색 효율성이 이진 정렬의 모양과 관련이 있음을 알 수 있습니다. 트리는 균일합니다. 이러한 이진 트리를 균형 이진 트리라고 합니다.
균형 이진 트리의 정의 균형 이진 트리는 빈 트리이거나 다음과 같은 속성을 갖습니다.
왼쪽 및 오른쪽 하위 트리 간 깊이 차이의 절대값은 1을 초과하지 않습니다.
왼쪽 및 오른쪽 하위 트리도 각각 균형 잡힌 이진 트리입니다.
이진 트리 노드의 왼쪽 하위 트리 깊이에서 오른쪽 하위 트리의 깊이를 뺀 값을 균형 인자 BF라고 합니다. 그러면 균형 이진 트리에 있는 모든 노드의 균형 인자는 -1, 0 및 1, 아래와 같이 왼쪽은 균형 이진 트리이고, 오른쪽은 불균형 이진 트리입니다.
균형 이진 트리에서는 모든 노드의 왼쪽 하위 트리와 오른쪽 하위 트리의 깊이 차이가 1을 초과하지 않기 때문에 그 깊이가 n 노드로 구성된 완전한 이진 트리의 깊이와 동일하다는 것을 증명할 수 있습니다⌊log2 따라서 평균 검색 횟수도 Floor⌊log2입니다. 균형 이진 트리를 구성하기 위해 Georgii M. Adelson-Velskii와 Evgenii M. Landis는 이진 균형 트리를 동적으로 유지하는 방법을 제안했습니다. 기본 아이디어는 이진 정렬 트리를 구성할 때 삽입이 노드일 때입니다. 삽입되면 먼저 노드를 삽입하여 트리의 균형이 파괴되는지 확인하고, 그렇다면 가장 작은 불균형 하위 트리를 찾고, 정렬된 트리 연결 관계를 유지하면서 가장 작은 불균형 하위 트리의 노드 간의 관계를 조정합니다. new Balance이므로 이러한 균형 잡힌 이진 트리를 AVL 트리라고 합니다. 최소 균형 하위 트리는 삽입된 노드와 가장 가까운 노드를 가지며, 균형 인자의 절대값이 1보다 큰 하위 트리를 루트 노드로 말합니다.
최소 불균형 하위 트리를 조정하는 데는 일반적으로 네 가지 상황이 있습니다.
단방향 오른쪽 회전(LL 유형): 위치가 왼쪽 하위 트리인 왼쪽 하위 트리를 삽입하고, 왼쪽 하위 트리를 axis , 아래 그림과 같이 단일 오른쪽 회전 을 수행합니다. 노드 옆의 숫자는 해당 노드의 균형 요소이며, I 노드는 현재 삽입된 노드입니다. (I 노드가 중앙에 있으면 I 노드가 왼쪽 자식일 수도 있고 오른쪽 자식일 수도 있다는 의미입니다.
중간 노드가 축이 회전하는 LL 유형에 주의하세요. 여기서 I가 BL의 왼쪽 자식인 이유는 이고 B-BL-I는 LL 유형 으로 간주될 수 없습니다. 균형 요소의 절대값 > 1에 가장 가까운 하위 트리 , 나머지 노드의 균형 요소의 절대값은 1을 초과하지 않습니다. 마찬가지로 I가 BL의 오른쪽 자식인 경우 B-BL-입니다. LR형이라고 볼 수 없습니다 2. 단방향 왼쪽 회전(RR형): Insert. 위치는 오른쪽 하위 트리의 오른쪽 하위 트리이고, 오른쪽 하위 트리는 축이고 단일 회전입니다. 왼쪽이 수행됩니다 RR 유형은 가운데 노드를 축으로 하여 회전됩니다. 여기서 I는 왼쪽 및 오른쪽 하위 트리이며 실제 RR 유형에 영향을 주지 않습니다. 원리는 위와 같습니다.
3. 양방향 회전 먼저 왼쪽, 그 다음 오른쪽(LR 유형): 왼쪽 하위 트리의 오른쪽 하위 트리를 삽입하고 먼저 왼쪽으로, 그 다음 오른쪽으로 두 번의 회전을 수행합니다. 노드를 왼쪽 자식으로 삽입합니다. : 왜 B-C-I를 하위 트리로 사용하여 RL 유형으로 정의할 수 없는지 주목하세요. 원리는 RR 유형의 설명과 동일하며 삽입된 노드에 가까운 R 끝 또는 L 끝을 사용합니다. 회전 축. 하트(아래 그림에 표시된 것처럼 먼저 B를 루트로 사용하여 하위 트리를 회전한 다음 A를 루트로 사용하여 하위 트리를 회전하는 것과 같습니다.)
노드를 오른쪽 자식으로 삽입합니다. 4. 양방향 회전. 오른쪽 먼저 다음 왼쪽(RL 유형): 오른쪽 하위 트리의 왼쪽 하위 트리를 삽입하고 두 가지 조정을 수행합니다. 먼저 오른쪽 회전을 수행한 다음 왼쪽 회전을 수행합니다. 처리 상황은 LR
노드를 왼쪽 자식으로 삽입:
삽입된 노드는 오른쪽 자식입니다:
위를 통해 균형 요소가 유형과 좋은 관계가 있음을 알 수 있습니다. 삽입된 노드에 가장 가까운 노드와 균형 요소의 절대값 > 1은 루트 노드의 하위 트리여야 합니다. .
연습
아래 그림과 같이 먼저 노드 2를 삽입하여 LL 유형이 되도록 합니다. 그런 다음 전체 오른쪽 프로세스를 수행하고 8과 6을 순서대로 삽입하면 노드 5의 균형 요소의 절대 값이 > 1이 되어 RL 유형이 되므로 먼저 5를 루트 노드로 사용하고 오른쪽 회전합니다. 하위 트리 8-6(RR 유형이 되기 위해), 다시 전체 트리의 루트 노드로 5를 사용합니다.
노드 9를 계속 삽입한 후 노드 4의 균형 요소는 >1이 되어 RR 유형이므로 4를 루트 노드로 사용하면 전체가 왼손잡이가 됩니다.
위 내용은 균형 이진 트리와 이진 정렬 트리의 관계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.