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

C++에서 이진 트리의 후위 순회에서 n번째 노드 찾기

<시간/>

이 문제에서는 이진 트리와 정수 N이 제공됩니다. 작업은 이진 트리의 후위 순회에서 n번째 노드를 찾는 것입니다.

바이너리 트리에는 각 노드가 최대 2개의 자식을 가질 수 있다는 특수한 조건이 있습니다.

순회는 트리의 모든 노드를 방문하는 프로세스이며 해당 값도 출력할 수 있습니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력

N = 6

C++에서 이진 트리의 후위 순회에서 n번째 노드 찾기

출력

3

설명

트리의 후위 순회 - 4, 5, 2, 6, 7, 3, 1

솔루션 접근 방식

아이디어는 재귀 호출을 사용하여 수행되는 이진 트리의 후위 순회를 사용하는 것입니다. 각 호출에서 왼쪽 하위 트리에 대해 postOrder() 호출을 찾은 다음 postOrder()를 호출하고 끝에서 루트 노드를 방문합니다. 이 탐색 동안 노드 수를 계산하고 수가 N인 노드를 인쇄합니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
bool isAPrimeNumber(int n) {
   if (n <= 1) return false;
   if (n <= 3) return true;
   if (n%2 == 0 || n%3 == 0) return false;
   for (int i=5; i*i<=n; i=i+6)
      if (n%i == 0 || n%(i+2) == 0)
         return false;
   return true;
}
long int calcPrimeProduct(long int n) {
   long int p = 2;
   n--;
   for (int i = 3; n != 0; i++) {
      if (isAPrimeNumber(i)) {
         p = p * i;
         n--;
      }
      i++;
   }
   return p;
}
long int findNextPrime(long int n) {
   long int nextPrime = n + 2;
   while (true) {
      if (isAPrimeNumber(nextPrime))
         break;
      nextPrime++;
   }
   return nextPrime;
}
int main() {
   long long int N = 5;
   long long int primeProduct = calcPrimeProduct(N);
   int fortunateNumber = findNextPrime(primeProduct) - primeProduct;
   cout<<N<<"th fortunate number is "<<fortunateNumber;
   return 0;
}

출력

5th fortunate number is 23