Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 높이 h의 균형 이진 트리 계산

<시간/>

이진 트리의 높이 H가 주어집니다. 목표는 주어진 높이의 균형 이진 트리의 수/카운트를 찾는 것입니다.

이진 트리 −는 각 노드가 왼쪽 자식과 오른쪽 자식인 최대 두 개의 자식을 갖는 트리 데이터 구조입니다.

높이 균형 이진 트리 -는 모든 노드의 두 하위 트리의 깊이가 1 또는 0만 다른 이진 트리로 정의됩니다. 그것은 왼쪽 서브트리의 높이이고 모든 노드에서 오른쪽 서브트리의 최대 차이는 1입니다.

다음 그림은 높이 h=3에 대해 가능한 높이 균형 이진 트리를 포함합니다.

C++에서 높이 h의 균형 이진 트리 계산

입력

Height H=2

출력

Count of Balanced Binary Trees of Height H is : 3

설명 − 주어진 그림에는 높이 H=2에 대해 가능한 균형 트리가 포함되어 있습니다.

C++에서 높이 h의 균형 이진 트리 계산

입력

Height H=3

출력

Count of Balanced Binary Trees of Height H is : 15

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수 H는 바이너리 트리의 높이를 나타내는 데 사용됩니다.

  • countBTheight(int h) 함수는 트리의 높이를 입력으로 받아 높이가 h인 가능한 균형 이진 트리의 수를 반환합니다.

  • 재귀적 접근 방식을 사용하고 있습니다.

  • 트리의 높이가 1인 경우, 즉 노드가 하나만 있으면 단일 노드가 있는 트리가 하나만 존재하고 균형이 유지됩니다. ( if(h==1), 반환 1)

  • 그렇지 않으면 높이는 루트보다 높이가 1 또는 2 작은 왼쪽 및 오른쪽 하위 트리의 합입니다. (균형된 나무는 높이 차이가 1입니다.)

  • 함수는 카운트를 결과로 반환합니다.

예시

#include <iostream>
int countBTheight(int h){
   // One tree is possible with height 0 or 1
   if (h == 0 || h == 1)
      return 1;
   return countBTheight(h-1) * (2 *countBTheight(h-2) + countBTheight(h-1));
}
int main(){
   int H = 4;
   std::cout << "Count of balanced binary trees of height H is: "<<countBTheight(H);
}

출력

Count of balanced binary trees of height H is: 315