特定の配列がC++での二分探索木のプレオーダートラバーサルを表すことができるかどうかを確認します
配列に要素のリストがあるとすると、要素が二分探索木のプレオーダートラバーサルになり得るかどうかを確認する必要があります。シーケンスが{40、30、35、80、100}のようであるとすると、ツリーは-
のようになります。
スタックを使用してこれを解決できます。この問題を解決するには、次の手順に従う必要があります。
- 空のスタックを定義する
- ルートを負の無限大として設定
- プレオーダーシーケンスのすべての要素について、次のようにします-
- 要素が現在のルートよりも小さい場合は、falseを返します
- 要素がスタックトップよりも大きい間はスタックから要素を削除し続け、最後に削除された要素をルートにします。
- 要素をスタックにプッシュします
例
#include <iostream> #include <stack> using namespace std; bool isValidPreorder(int pre[], int n) { stack<int> stk; int root = INT_MIN; for (int i=0; i<n; i++) { if (pre[i] < root) return false; while (!stk.empty() && stk.top()<pre[i]) { root = stk.top(); stk.pop(); } stk.push(pre[i]); } return true; } int main() { int pre[] = {40, 30, 35, 80, 100}; int n = sizeof(pre)/sizeof(pre[0]); if(isValidPreorder(pre, n)) cout << "This can form BST"; else cout << "This can not form BST"; }
出力
This can form BST
-
与えられた二分木のプレオーダー再帰トラバーサルを実行するC++プログラム
ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木のプレオーダートラバーサルでは、ツリー内の各ノードに順番に(ルート、左、右)アクセスします。 二分木のプレオーダートラバーサルの例は次のとおりです。 二分木は次のように与えられます。 プレオーダートラバーサルは次のとおりです:6 4 1 5 8 プレオーダー再帰トラバーサルを実行するプログラムは次のとおりです。 例 #include<iostream> using namespace std; struct node { &nb
-
Pythonのプレオーダートラバーサルから二分探索木を構築する
指定されたプレオーダートラバーサルに一致するバイナリ検索ツリーを作成する必要があるとします。したがって、事前注文トラバーサルが[8,5,1,7,10,12]のような場合、出力は[8,5,10,1,7、null、12]になるため、ツリーは-になります。 これを解決するには、次の手順に従います- root:=0 th プレオーダートラバーサルリストのノード stack:=スタック、およびルートをスタックにプッシュします プレオーダーリストの2番目の要素の各要素iについて i:=値iのノード iの値がスタックトップ要素の最上位である場合、 スタックトップノードの左側:=i