在C++中查詢二叉樹的後序遍歷中的第n個節點


在這個問題中,我們給定一個二叉樹和一個整數N。任務是找到二叉樹後序遍歷中的第n個節點。

一個二叉樹有一個特殊的條件,即每個節點最多可以有兩個子節點。

遍歷是一個訪問樹中所有節點的過程,也可能列印它們的值。

讓我們舉個例子來理解這個問題:

輸入

N = 6

輸出

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

更新於:2021年3月12日

115 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.