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

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

[[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学生が顔を見せて歌う、この応用は将来に期待される

ブログ    
ブログ    

推薦する

AI危機の前に、この3つの資質を備えた子供たちが将来勝利するだろう

[[234521]]文|ハオ・ジンファンSF作家第74回ヒューゴー賞受賞者公式アカウント「小唐科学子...

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

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

ディープラーニングとディープクローニング: チャットボットにとってより優れたソリューションはどちらでしょうか?

[[200112]]編集者注: チャットボットは目新しいものではありません。Facebook や ...

エッジAIとエッジコンピューティングについて学ぶ

エッジ人工知能 (EdgeAI) は、人工知能の分野における新しい注目の領域の 1 つです。目標は、...

通信産業の発展を後押しし、2つの主要ドローンの価値が強調される

最近、わが国の科学技術分野は新たな躍進を遂げました。ドローンによる「橋渡し」の力を借りて、量子ネット...

...

インタラクティブな推測 | ワールドカップとブラックテクノロジーが出会ったとき、最終的な勝者は誰になるでしょうか?

[オリジナル記事は51CTO.comより] 2018年ロシアワールドカップはエキサイティングな決勝...

...

世界の顔認識技術応用地域分布マップ

世界中の多くの規制当局は、公開ビデオフィード上の人物を識別するなどのアプリケーションに顔認識を使用し...

2022年に注目すべき6つのAIトレンド

AIは急速に私たちの日常生活に入り込んできており、近い将来、AIと人間の境界線を見分けることが難しく...

前例のない変化:パンデミックはテクノロジーと未来を急速に形作っている

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

人工知能の時代に教育はどのように適応すべきでしょうか?

これからの学びは、従来の学校中心の島型ではなく、新しいタイプの島型になります。家庭、インターネット、...

調達における AI の夜明け: 効率性と洞察力の新時代

McKinsey & Company の画期的なレポートでは、AI を含むデジタル調達ソリュ...

...