ある配列があり、それがBSTのポストオーダートラバーサルを表すかどうかを知る必要があります。 (例:ポストオーダーの代わりに質問があった場合は、配列が時刻o(n)でソートされているかどうかだけチェックする必要があります)特定の配列がバイナリ検索ツリーのポストオーダートラバーサルを表しているかどうかをチェックする方法?
2
A
答えて
0
クイックサニティチェック:配列の最後の項目がルートノードの場合、それはポストオーダートラバーサルの結果ではありません。同様に、配列内の最初の項目は、先行順走査が行われた場合のルートです。
0
{LEFT Subtree} {Right Subtree} {ROOT}によってポストオーダートラバーサルが行われます。したがってここでの考え方は、右端から配列を横断することです。配列の最後の要素はルートで、右から左へと、小さい要素に遭遇したときに左のサブツリーで始まる境界をマークすると、BSTはこのインデックスから大きな要素を持ちません。これは各サブツリーに適用されます。 C++でのアルゴリズムは、このように書きます -
bool isBST(int arr[], int n){
//Set root to the max integer value.
int root = INT_MAX;
//Stack used to keep track of current subtree
std::stack<int>s;
//Start at the end of the array because Postorder traversal is
// <L><R><D>
for (int i = n-1; i>=0; i--) {
//False if any larger number in the left subtree
if (arr[i]> root) {
return false;
}
//Reset the root for boundary of every subtree,
//when current item is smaller than top,
//that means we are starting with left subtree of this root
while (!s.empty() && arr[i] < s.top()) {
root = s.top();
s.pop();
}
//Keep pushing the elements otherwise
s.push(arr[i]);
}
return true;
}
関連する問題
- 1. バイナリツリーがバイナリ検索ツリーであるかどうかをチェックする機能
- 2. バイナリ検索ツリーの配列の実装
- 3. バイナリ検索ツリーへの配列クイック
- 4. Recursivleyバイナリ検索ツリーが完成したかどうかのテスト
- 5. ツリーがJavaのバイナリ検索ツリーであるかどうかをチェックするコードは、テストケースが失敗しています。確かな理由
- 6. バイナリツリーがバイナリ検索ツリーであるかどうかをチェックする機能はありますか?
- 7. Java:バイナリ検索ツリーを文字列に変換する方法
- 8. バイナリ検索ツリーから文字列へ
- 9. ツリーはバイナリ検索ツリーですか?
- 10. バイナリ検索ツリー配列を出力する
- 11. ソートされた配列をバイナリ検索ツリーに挿入する
- 12. バイナリ検索ツリー
- 13. バイナリ検索ツリー
- 14. バイナリ検索ツリー
- 15. バイナリ検索ツリー
- 16. この特定の数式を持つソートされていない配列を使用してバイナリ検索ツリーを実装する方法は?
- 17. バイナリ検索ツリーの追加、削除、包含、イテレータが動作しているかどうかをテストしたい
- 18. バイナリ検索ツリーはどこから始めるのですか?
- 19. 配列のすべての要素が特定の値であるかどうかをチェックする方法?
- 20. 特定のノードクラスのツリーを検索する方法
- 21. バイナリツリー、バイナリ検索ツリー、バイナリ検索
- 22. 文字列からバイナリ検索ツリーを作成するには?
- 23. バイナリ検索ツリー - 別のツリーに1つのツリーをコピーする
- 24. バイナリ検索ツリーで親を検索しますか?
- 25. バイナリ検索ツリーで最大のノードを削除する方法
- 26. Pythonを使用して特定のレベルのJSONツリーを検索する方法
- 27. Javaバイナリ検索ツリー - 再帰ボイドコピー方法
- 28. 特定の配列の検索方法項目が存在するかどうかJQuery + Backbone.jsの使用
- 29. カスタムデータ型でバイナリ検索ツリーを使用していますか?
- 30. 文字列用のバイナリ検索ツリー
が面白い宿題の問題のようですね。あなたはそれを解決しようと試みて何を思いつきましたか? –
それはほぼ*何でも*表すことができます(たとえば、私のお母さんが好きな宝くじ番号)...質問を明確にしてください。 –
@ KarolyHorvath「OPは基本的にOPとは」と思います。バイナリ検索ツリーから開始し、ポストオーダートラバーサルを行い、配列内の要素を訪問した順にノードの値で埋めることで、配列を取得できますか?その質問は十分に明確だと思うが、研究努力はない。 –