Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm nút thứ n trong truyền qua Thứ tự sau của Cây nhị phân trong C ++

Trong bài toán này, chúng ta được cung cấp một cây nhị phân và một số nguyên N. Nhiệm vụ là tìm ra nút thứ n trong tính năng truyền qua Thứ tự sau của Cây nhị phân.

Cây nhị phân có một điều kiện đặc biệt là mỗi nút có thể có tối đa hai nút con.

Traversal là một quá trình để truy cập tất cả các nút của một cây và có thể in ra cả giá trị của chúng.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

N = 6

Tìm nút thứ n trong truyền qua Thứ tự sau của Cây nhị phân trong C ++

Đầu ra

3

Giải thích

Đăng duyệt thứ tự của cây - 4, 5, 2, 6, 7, 3, 1

Phương pháp tiếp cận giải pháp

Ý tưởng là sử dụng trình duyệt bài đăng của cây nhị phân được thực hiện bằng cách sử dụng lệnh gọi đệ quy. Trong mỗi lần gọi, chúng ta sẽ tìm cuộc gọi postOrder () cho cây con bên trái đầu tiên và sau đó gọi postOrder () và cuối cùng, hãy truy cập vào nút gốc.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

5th fortunate number is 23