C++でのバイナリツリーのポストオーダートラバーサルでn番目のノードを検索します
この問題では、二分木と整数Nが与えられます。タスクは、二分木のポストオーダートラバーサルでn番目のノードを見つけることです。
二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。
トラバーサルは、ツリーのすべてのノードにアクセスするプロセスであり、それらの値も出力する場合があります。
問題を理解するために例を見てみましょう
入力
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
-
C++の二分木で最大垂直和を見つける
二分木があるとします。タスクは、垂直順序トラバーサルのすべてのノードの合計の最大値を出力することです。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 ここでの最大値は12です。アプローチは単純です。垂直順序トラバーサルを実行してから、合計を見つけて最大値を確認します。 例 #include<iostream> #include<map> #include<vector> #include<queue> using namespace
-
与えられた二分木のポストオーダー再帰トラバーサルを実行するC++プログラム
ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木のポストオーダートラバーサルでは、ツリー内の各ノードに順番に(左、右、ルート)アクセスします。 二分木のポストオーダートラバーサルの例は次のとおりです。 二分木は次のように与えられます。 注文後のトラバーサルは次のとおりです:1 5 4 8 6 注文後の再帰的走査を実行するプログラムは次のとおりです。 例 #include<iostream> using namespace std; struct node { &