Java 클래스에서는 다양한 유형의 컬렉션의 복잡성에 대해 배우고 있습니다.
곧 우리는 이진 트리에 대해 이야기 할 것입니다. 이 책은 이진 트리의 최소 높이가자세한 설명은 제공하지 않습니다.
누군가 이유를 설명 할 수 있습니까?
Java 클래스에서는 다양한 유형의 컬렉션의 복잡성에 대해 배우고 있습니다.
곧 우리는 이진 트리에 대해 이야기 할 것입니다. 이 책은 이진 트리의 최소 높이가자세한 설명은 제공하지 않습니다.
누군가 이유를 설명 할 수 있습니까?
답변:
이진 트리는 비 리프 노드에 1 개 또는 2 개의 자식이 있고 리프 노드에 0 개의 노드가 있습니다. 하자 트리에있는 노드들과 우리는 그것들이 여전히 유효한 이진 트리를 형성하는 방식으로 그것들을 배열해야합니다.
증명하지 않고 높이를 최대화하려면 주어진 노드를 선형으로 배열해야합니다. 즉, 각 비 리프 노드에는 자식이 하나만 있어야합니다.
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
여기서, 노드 수로 높이의 관계를 계산하는 공식은 간단합니다. 만약 나무의 높이입니다 .
이제 이진 트리를 구성하려고하면 최소 높이의 노드 (항상 완전한 이진 트리로 환원 가능)는 다음 레벨로 넘어 가기 전에 가능한 한 많은 노드를 상위 레벨로 압축해야합니다. 따라서 나무는 다음과 같은 형태를 취합니다.
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
특별한 경우부터 시작하겠습니다. .
우리는 그것을 알고 있습니다
또한 레벨을 쉽게 증명할 수 있습니다. 최대를 가질 수 있습니다 그 안에 노드.
위의 합계에서이 결과를 사용하면 각 수준마다 에서 에 해당 용어가 있습니다. 의 확장에 . 이것은 완전한 이진 트리를 의미합니다. 노드는 완전히 채워지고 높이가 있습니다. , 어디 완전한 이진 트리의 높이 노드.
이 결과를 사용하여 ,와 나무 때문에 노드가 완전히 채워져 노드는 다음 단계에서 추가 노드를 수용해야합니다 높이를 1 증가 에 .
지금까지 우리는 증명했다
그러므로,
하지만 양쪽에 통나무 (베이스 2)를
그러므로,
그리고 우리는이 결과를 일반화 할 수 있습니다 유도 사용.
추신 : 완전한 이진 트리의 높이를 다음과 같이 기술 한 책 모두에게 유효하지 않습니다 때문에 대부분의 정수에 비 정수 값을 제공합니다. (즉, 완벽한 이진 트리를 제외하고) 모든 나무의 높이는 순수하게 통합됩니다.
나는 그것을 가정하고있다. 이진 트리의 총 노드 수를 의미합니다. 이진 트리의 높이 (또는 깊이)는 루트 노드 (부모가없는 노드)에서 가장 깊은 리프 노드까지의 경로 길이입니다. 이 높이를 최소로 만들려면 트리가 가장 완전히 포화됩니다 (마지막 계층 제외). 특정 계층에 자식이있는 노드가있는 경우 부모 계층의 모든 노드에 두 개의 자식이 있어야합니다.
따라서 완전히 포화 된 이진 트리 계층은 노드는 최대이며 깊이는 . 따라서 이진 트리의 깊이가 있으면 트리가 완전히 포화 된 경우 발생하는 최대 노드 수를 매우 쉽게 찾을 수 있습니다. 대수 클래스를 상기하면 기하학적 시리즈 일 뿐이 므로 다음과 같이 나타낼 수 있습니다.
다시 정리하자 :
높이를 최소로 유지하려면 마지막을 제외한 모든 레벨을 채울 필요가 있음을 쉽게 알 수 있습니다. 왜? 그렇지 않으면 마지막 레벨 노드를 상위 레벨의 빈 슬롯으로 옮길 수 있습니다.
이제 지정되지 않은 수의 콩이 있고 한 번에 하나의 콩을주고 최소 높이로 이진 트리를 구성하도록 요청한다고 상상해보십시오. 마지막 레벨을 완전히 채우거나 마지막 레벨에서 하나 이상의 Bean을 가질 때까지 Bean이 부족할 수 있습니다. 이 시점에서 나무 높이 h를가 집니다.
두 경우 모두 h 는 변하지 않습니다. 따라서 제약 조건 이있는 높이 h 의 완전한 이진 트리가 있음을 의미합니다 . 그러나 나는 마지막 수준에서 상상의 콩을 가정했습니다 (마지막 수준을 채울 수없는 경우). 실제로는