C ++
 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

  1. C++の二分木で最大垂直和を見つける

    二分木があるとします。タスクは、垂直順序トラバーサルのすべてのノードの合計の最大値を出力することです。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 ここでの最大値は12です。アプローチは単純です。垂直順序トラバーサルを実行してから、合計を見つけて最大値を確認します。 例 #include<iostream> #include<map> #include<vector> #include<queue> using namespace

  2. 与えられた二分木のポストオーダー再帰トラバーサルを実行するC++プログラム

    ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木のポストオーダートラバーサルでは、ツリー内の各ノードに順番に(左、右、ルート)アクセスします。 二分木のポストオーダートラバーサルの例は次のとおりです。 二分木は次のように与えられます。 注文後のトラバーサルは次のとおりです:1 5 4 8 6 注文後の再帰的走査を実行するプログラムは次のとおりです。 例 #include<iostream> using namespace std; struct node {   &