毎日のアルゴリズム: バランスのとれた二分木

毎日のアルゴリズム: バランスのとれた二分木

[[426529]]

この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載したもので、著者はsisterAnです。この記事を転載する場合は、「3分で学ぶフロントエンド」公式アカウントまでご連絡ください。

木の基礎については、こちらをご覧ください: 初心者のための木

二分木が与えられた場合、それが高さバランスの取れた二分木であるかどうかを判断します。

この問題では、高度にバランスのとれた二分木は次のように定義されます。

バイナリ ツリー内の各ノードの左側のサブツリーと右側のサブツリー間の高さの差の絶対値は 1 を超えません。

例1:

二分木[3,9,20,null,null,15,7]が与えられた場合

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

true を返します。

例2:

二分木[1,2,2,3,3,null,null,4,4]が与えられた場合

  1. 1
  2. / \
  3. 22
  4. / \
  5. 3 3
  6. / \
  7. 4 4

false を返します。

解決策 1: トップダウン (ブルートフォース)

解決方法: 各ノードの左サブツリーと右サブツリーの最大高さの差を上から下まで比較します。バイナリ ツリー内の各ノードの左サブツリーと右サブツリーの最大高さの差が 1 以下、つまり各サブツリーのバランスが取れている場合、バイナリ ツリーはバランスの取れたバイナリ ツリーです。

コード実装:

  1. const isBalanced =関数(ルート) {
  2. if(!root)戻り値 真実 
  3. Math.abs (depth(root.left ) -depth( root.right ) ) <= 1を返す
  4. && isBalanced(ルート.left )
  5. && isBalanced(ルート.right )
  6. }
  7. const depth =関数(ノード) {
  8. if(!node) は-1を返します
  9. 1 + Math.max ( depth(node.left ) ,depth(node.right ) )を返します
  10. }

複雑性分析:

  • 時間計算量: O(nlogn)、深さを計算する際に多くの冗長な操作がある
  • 空間計算量: O(n)

解決策2: ボトムアップ(最適化)

解決方法: バイナリ ツリー (左ルートと右ルート) の後続のトラバーサルを使用して、下から上へのサブツリーの最大の高さを返し、各サブツリーがバランスの取れたツリーであるかどうかを判断します。バランスが取れている場合は、その高さを使用して親ノードがバランスが取れているかどうかを判断し、親ノードの高さを計算します。バランスが取れていない場合は、-1 を返します。

バイナリ ツリー内の各ノードの左サブツリーと右サブツリーの深さを走査して比較します。

  • 左と右のサブツリーの深さを比較します。差が 1 より大きい場合は、現在のサブツリーが不均衡であることを示すフラグ -1 を返します。
  • 左と右のサブツリーのいずれかがバランスが取れていない場合、または左と右のサブツリーの差が 1 より大きい場合、バイナリ ツリーは不均衡です。
  • 左と右のサブツリーのバランスが取れている場合は、現在のツリーの深さ(左と右のサブツリーの最大深さ + 1)を返します。

コード実装:

  1. const isBalanced =関数(ルート) {
  2. balanced(root) !== -1を返す
  3. };
  4. const balanced =関数(ノード) {
  5. if (!node) が0 を返す
  6. 定数left = balanced ( node.left )
  7. 定数right = balanced( node.right )
  8. if (=== -1 ||=== -1 || Math.abs (-) > 1) {
  9. -1を返す
  10. }
  11. Math.max ( left , right )+1返す
  12. }

複雑性分析:

  • 時間計算量: O(n)
  • 空間計算量: O(n)

<<:  AIと自動化を活用して機密データを大規模に識別する方法

>>:  清華大学のAI学生が顔を見せて歌う、この応用は将来に期待される

ブログ    
ブログ    
ブログ    

推薦する

...

ドローン自動化システムの産業への応用を探る

世界中の企業は、競合他社に対して競争上の優位性を獲得するのに役立つ高度なテクノロジーを常に探していま...

GPT-3.5 を選択すべきでしょうか、それとも Llama 2 などのオープンソース モデルを微調整すべきでしょうか?総合的に比較した結果、答えは

GPT-3.5 の微調整には非常にコストがかかることはよく知られています。この論文では、手動で微調整...

...

プレーン AI: ディープラーニングを理解するのは本当に難しいのでしょうか?中学数学、たった10分

現在、AI が業界で重要な役割を果たしているため、ディープラーニングは重要な研究分野として、意味理解...

あなたは人工知能についてどれくらい知っていますか?普通の人として、私たちはもっと多くのことを知る能力を持っているのでしょうか?

それはとても神秘的で、本当にハイエンドで、急速に発展しています!それは私たちの周りにあり、あなたは気...

AIツールは企業にデータ侵害のリスクをもたらす

2021年以降、企業内部者によるデータ侵害、損失、盗難は月平均28%増加しており、回答者の85%は今...

人工知能は「馴染みのものを殺す」ツールになるのでしょうか?

長い間、私の携帯電話のパッケージには主に 400 分の通話時間 + 500M のネットワーク トラフ...

MLタスクを効率的、迅速、正確に完了するにはどうすればよいでしょうか? 4つのAutoMLライブラリについて学びましょう

自動機械学習 (AutoML) は、データをモデル化するための機械学習モデルの構築プロセスを自動化す...

ChatGPT 1 周年、Altman が OpenAI に復帰!帰国の内幕を明かすイリヤの所在はまだ不明

ChatGPT の 1 周年に、OpenAI は公式発表を行いました: Sam Altman が O...

「人工知能+教育」はどのような機会と課題をもたらすのでしょうか?

人工知能がどのような新しい形で登場するかが話題になっている一方で、教育分野では新たな一連の変化が起こ...

人工知能と機械学習の違いと機能は何ですか?

人工知能と機械学習。これらの言葉だけでも、意思決定を行うコンピューターが部署や課全体に取って代わる世...

学ぶ価値のある Github 上の 7 つの AI プロジェクト

「Python を学ぶ大きな楽しみの 1 つは、人工知能を学ぶことです。Lao K が GitHub...

金融ロボットの解読:毒ではなくアシスタント

[[231414]]会計、税務、監査などの業務でロボットが人間に取って代わったらどうなるか想像してみ...