サイズnの指定された配列がnレベルのBSTを表すことができるかどうかをC++で確認してください
配列Aがあり、配列がnレベルのBSTを表すことができるかどうかを確認する必要があります。レベルがであるため、次のようにツリーを構築できます。数値をkとすると、kより大きい値は右側に移動し、kより小さい値は左側に移動します。 {50、20、9、25、10}と{50、30、20、25、10}の2つのリストがあるとします。
最初のものは無効ですが、2番目のものは有効です。
これを確認するには、BSTを作成して高さを確認するか、配列ベースのアプローチを使用します。アレイベースのアプローチは以下のようなものです-
- 2つの変数max=infinityを使用して、左側のサブツリーの最大制限をマークし、min =負の無限大を使用して、右側のサブツリーの最小制限をマークします。
- arr[i]からarr[n– 1]の範囲内の各要素について、次の手順を繰り返します
- arr [i]>arr[i-1]およびarr[i]>minおよびarr[i]
- それ以外の場合、arr[i]>minおよびarr[i]
を更新します。 - これらのいずれも有効でない場合、要素は新しいレベルに挿入されるため、中断します
- それ以外の場合、arr[i]>minおよびarr[i]
- arr [i]>arr[i-1]およびarr[i]>minおよびarr[i]
例
#include <iostream>
using namespace std;
bool canMakeBSTifHeightN(int arr[], int n) {
int min = INT_MIN;
int max = INT_MAX;
for(int i = 1; i < n; i++){
if (arr[i] > arr[i - 1] && arr[i] > min && arr[i] < max) {
min = arr[i - 1];
} else if (arr[i] < arr[i - 1] && arr[i] > min && arr[i] <
max) {
max = arr[i - 1];
} else {
return true;
}
}
return false;
}
int main() {
int elements[] = {50, 30, 20, 25, 10};
int n = sizeof(elements)/sizeof(elements[0]);
if (canMakeBSTifHeightN(elements, n))
cout << "We can make BST of height " << n;
else
cout << "We can not make BST of height " << n;
} 出力
We can make BST of height 5
-
特定のツリーグラフが線形であるかどうかをC++で確認します
ここでは、ツリーグラフが線形であるかどうかを確認する方法を説明します。線形ツリーグラフは1行で表すことができます。これが線形ツリーグラフの例であると仮定します。 しかし、これは線形ではありません- グラフが線形であるかどうかを確認するには、2つの条件に従うことができます ノードの数が1の場合、ツリーグラフは線形です ノードの(n – 2)が次数2の場合 例 #include <iostream> #include <vector> #define N 4 using namespace std; class Graph{ p
-
サイズnの指定された配列がnレベルのBSTを表すことができるかどうかをC++で確認してください
配列Aがあり、配列がnレベルのBSTを表すことができるかどうかを確認する必要があります。レベルがであるため、次のようにツリーを構築できます。数値をkとすると、kより大きい値は右側に移動し、kより小さい値は左側に移動します。 {50、20、9、25、10}と{50、30、20、25、10}の2つのリストがあるとします。 最初のものは無効ですが、2番目のものは有効です。 これを確認するには、BSTを作成して高さを確認するか、配列ベースのアプローチを使用します。アレイベースのアプローチは以下のようなものです- 2つの変数max=infinityを使用して、左側のサブツリーの最大制限をマー