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 { &