私はバイナリツリーで問題を抱えています。問題が発生したとき、完全なバイナリツリーの最後のレベルで最も右のノードを見つけてください。ここで問題はO(n) O(n)でそれをすることは、すべての要素を横断することによって簡単ですが、O(n)よりも複雑ではない方法でこれを行う方法があります。インターネットを多用しています。物事について何かを得る。 ありがとうございます。完全なバイナリツリーの最後のレベルで最も右のノードの位置を見つける方法は?
答えて
これは完全なバイナリツリーなので、右のノードに到達するまですべての右ノードを通過すると、O(N)ではなくO(logN)になります。正規のバイナリツリーでは、最悪の場合、すべてのノードが右に並んでいるので、完全なバイナリツリーであるため、O(N)をとります。
これはO (n) '。 – amit
TomerSHは、すべてのノードを訪問し、より良い方法を求めていると言っています。 –
はい、これはO(log(n)^2)
バイナリ検索のバリエーションを実行します。
これは、最初に左の要素に移動し、次に2番目の左端の要素に、次に4番目の左端の要素8番目に移動して、そのような要素が見つからなくなるまで実行できます。 見つかった最後の要素がi
番目で、最初に2i
でなかったとします。
これで、その範囲で簡単にバイナリ検索ができます。
これは合計反復数であり、各反復はツリー全体になりますので、合計はO(log(n)^2)
です。
(1)ここで、「xの最も左の要素」は、ツリーの最も深いレベルのノードのみを参照しています。
あなたはノードの数を知っていると仮定します。そのような数字をn
としましょう。
完全なバイナリツリーでは、レベルi
はレベルi - 1
より2倍のノード数を持っています。
したがって、n
を反復して2
に分けることができます。余りがある場合n
は右の子です。そうでなければ、左の子です。余りがあるかどうかにかかわらず、シーケンス、好ましくはスタックに格納します。一部など
:
Stack<char> s;
while (n > 1)
{
if (n % 2 == 0)
s.push('L');
else
s.push('R');
n = n/2; // n would int so division is floor
}
while
終了すると、スタックは、右端のノードへのパスを含みます。
while
が実行された回数は、log_2(n)
です。
これをスタックに追加するとO(n)時間がかかるため、この時間は重要ではありません。 –
@aswin mythiliではありません。スタックへの挿入はO(1)です。リストまたはベクトルを使用することもできます。時間は挿入の数に制限されています。これは 'log_2(n)'です。 – lrleon
- 1. horizontalScrollViewで最も右の位置を見つける方法
- 2. バイナリツリーのノード数が最も多いレベルを印刷する方法は?
- 3. 階層ツリーの最後のノードを見つける方法C#
- 4. 最後の位置パラメータを見つける方法はありますか?
- 5. 最も頻繁なレベルの要因を見つける方法は?
- 6. 右のサブツリーで最小の番号を見つける方法
- 7. Javascriptでほとんどのポイントを持つノードを最も少なく見つける最適な方法
- 8. リストの要素の最適な位置を見つける
- 9. 3D MATLAB行列の最大要素の位置を見つける方法は?
- 10. バイナリツリー内の任意の2つのノードの最大の違いを見つける方法
- 11. バイナリツリー内のノードを見つける
- 12. 仮想キーボードの最上位ピクセル位置を見つける?
- 13. reportlab、ページの最後の段落の位置/座標を見つける
- 14. UIWebView(準備完了状態4)の最後のロードを見つける方法
- 15. 配列内の最小要素の位置を見つける
- 16. 再帰的なSQLクエリで完全なノードを見つける方法
- 17. 最後のロックのタイムスタンプを見つける方法は?
- 18. バイナリツリーの同じレベルのノードの最大数(プロローグ)
- 19. ダイナミックアレイの平均を見つける最も簡単な方法
- 20. Kohanaのormオブジェクトで最後のキーを見つける方法
- 21. グループ内の最後から2番目のレコードを見つける方法最後に見つけ出す
- 22. XMLファイル内のノードを最も効率的に見つける方法(C++)
- 23. matlab image uint8最左/上/下/右ピクセル位置を見つける配列
- 24. Prologでバイナリツリーの偶数レベルの要素を見つける
- 25. Firebaseの 'ChildEventListener'を使用して最上位/最下位レベルのノードから値を取得する方法は?
- 26. ポリゴンの最も近い点をユーザーの位置に見つけよう
- 27. ジャンプは最後の位置
- 28. 最も長い繰り返し文字の位置を見つける
- 29. Javaのバイナリツリーの最小値を再帰的に見つける
- 30. numpy.ndarrayで最大値の最後の出現を見つける方法
ツリー内の全ノード数を保存しておけば、左ブランチまたは右ブランチをいつ訪れるか正確に分かっているのでO(logN)です –