答えて
限り我々は右のサブツリー内の大きい値と小さい値を持つノードを格納してどのノードでも左サブツリーの場合、Bottom Right
のノードが最大値を持ち、Bottom Left
のノードが最小値を持つことになります。
これで、ノードを見つける必要があります。 Complete and Full BST
また、配列に格納されているため、インデックスはノード上に均等に分散されますes。だからここでTop to Bottom
とLeft to Right
1
からn
までのノードにインデックスを割り当てようとすると、n
ノードがあればそれを移動する必要があります。私たちは与えられた木のインデックスを作成している場合
、だからここ
1
/ \
2 3
/ \ / \
4 5 6 7
/\ ^^^-------------Largest value
8 9
Smallest value----^^^
8
インデックスが最も小さい値を持つことになると
7
率を有するノードが最も大きな値を持つことになる有するノード。
ここで問題はそれを見つける方法です。それで、レベルがl
のツリーを持っているとしたら、最大値のインデックスは2^level - 1
となり、最小値は2^level
インデックスになります。total_nodes = 2^level-1
の場合は、ここで最大値を取得するインデックスが間違った答えを与えることがあります。だから、level
を別の方法で計算する必要があるのは、total_nodes = n+1
です。
int level = (int)(Math.ceil (Math.log(n)/Math.log(2))); //For index of smallest value;
int smallest_index = (int) Math.pow (2,level);
level = (int)(Math.ceil (Math.log(n+1)/Math.log(2))); //For index of largest value;
int largest_index = (int) Math.pow (2,level) - 1;
ザンケットの回答は基本的には正しいですが、最終的に言われている通り私は不快になります。 2つの丸められた(!)ログの丸められた(!)比率は、のほうに丸められません。ちょうどは、意図した整数よりわずかに高いと言いますか?そして、ceil
はそれをすべて持ち歩くでしょう。たぶんそれはうまくいくかもしれませんが、設計上ではなく事実上ではあります。
これは、ビット単位の算術の観点から、このようなことを考える/心配する必要なしに、「きれいに」記述することもできます。すべてが整数のままなので、推論するのが簡単です。
最も低い項目のインデックスは、n
に存在する2の最大累乗であるため、最も高い設定ビットです。 Javaでは、そこにそのためにも機能です:Integer.highestOneBit
は、あるいは我々はそれを書くことができます:
int highestOneBit(int x) {
x |= x >> 16;
x |= x >> 8;
x |= x >> 4;
x |= x >> 2;
x |= x >> 1;
return x^(x >>> 1);
}
そして今、我々は
indexOfLowest = highestOneBit(n);
indexOfHighest = highestOneBit(n + 1) - 1;
を持っているこれはまだ1索引(未使用のインデックス0を残して)を前提とし、すべて0にインデックスを付けるために1だけオフセットすることができます。
これは、 'Math.ceil()'や 'Math.log()'の値が大きければ矛盾する結果になるので、レベルを取得するのに最適です。正解を保証するビット単位の演算を使う方が良いです。 –
- 1. 最大および最小日付
- 2. インデックスを使用した最小および最大番号配列?
- 3. 日付範囲の最小および最大年の取得
- 4. AngularJS通貨、最大および最小のui-mask
- 5. ファブリックオブジェクトの最小および最大リサイズ制限
- 6. uib-datepickerの条件付き最小および最大日付
- 7. 最小値、最大値、および平均値を調べる
- 8. 最小および/または最大リストが
- 9. 完全グラフの最小スパニングツリー
- 10. 選択ソート - 最小/最大のインデックス
- 11. 最大値と最小値のMySQLインデックス
- 12. 棒グラフのY軸の最小、最大、およびグリッド線を指定
- 13. バイナリデータの読み取り - 最小および最大座標の検索
- 14. CUDAのイプシロン、最小および最大定数の検索方法は?
- 15. RemoteInputの最小長および/または最大長の指定方法
- 16. プログラムの最小および最大グレードを計算しません。 (C++)(fstream)
- 17. 入力された最小、最大、平均、および数字の表示
- 18. クローム誤読みの最大高さおよび最大幅
- 19. バイナリツリーの最小の高さ
- 20. CSS:カスタム最小長および最大長入力フィールドを作成したい
- 21. vb.netチャートを変更するxAxis最大および最小datetime型
- 22. 子ウィンドウをメインウィンドウで最小化および最大化する方法
- 23. バイナリツリーの最大幅 - Javaコード
- 24. バイナリツリーの最大高さ
- 25. Pythonバイナリツリー最小値関数
- 26. ThreadPoolExecutor - コアおよび最大プールは
- 27. 計算最小及びKDBのテーブルにおける各変数の最大値
- 28. 最小から最大までの要素のインデックス
- 29. 最小/最大番号の配列インデックスのシーケンシャルカウントダウン
- 30. 最大&最小ハイチャートライン
バイナリ検索ツリーは、各左ノードが親ノードよりも小さく、各右ノードが親ノードよりも大きいソートツリーであることを考慮すると、最小値は左端で最大値です右端です。 –