LeetCode アルゴリズム再帰クラス - バランスのとれたバイナリ ツリー

目次

110. バランスの取れた二分木

答え:

操作結果:

最適化されたバージョン 1:

操作結果:


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

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

二分木の各ノードの左右のサブツリー間 の高さの差の絶対値は 1 を超えません。

例 1:

入力: root = [3,9,20,null,null,15,7]
出力: true

例 2:

入力: root = [1,2,2,3,3,null,null,4,4]
出力: false

例 3:

入力: root = []
出力: true

ヒント:

  • ツリー内のノードの数は範囲内 [0, 5000] です
  • -104 <= Node.val <= 104

题解:

アイデアは104 にあります。バイナリ ツリーの最大の深さ - LeetCode

アイデアに基づいて完成した、対応する問題解決策はLeetCode アルゴリズム再帰クラス - バイナリ ツリーの最大深さ_turbo 夏 漱石のブログ - CSDN ブログ

  1. 深さを計算する関数 deep と結果を保存するブール型のグローバル変数 res を定義します。
  2. deep 関数を呼び出して深さを計算します
  3. deep 関数は、各レイヤーの深さを再帰的に計算し、左右のサブツリーの深さを比較します。
  4. 1 より大きい場合は、res 値を false に変更します。

代码:

class Solution {
    boolean res=true;
    public boolean isBalanced(TreeNode root) {
        deep(root);
        return res;
    }
    private int deep(TreeNode root){
        if(root==null) return 0;
        int left=deep(root.left);
        int right=deep(root.right);
        if(Math.abs(left-right)>1){
           res=false;
        }
        return Math.max(left,right)+1;
    }
}

操作結果:

 

最適化されたバージョン 1:

class Solution {
    boolean res=true;
    public boolean isBalanced(TreeNode root) {
        deep(root);
        return res;
    }
    private int deep(TreeNode root){
        if(root==null) return 0;
        int left=deep(root.left);
        int right=deep(root.right);
        if(Math.abs(left-right)>1){
           res=false;
           return -1;
        }
        return Math.max(left,right)+1;
    }
}

修正方法 2 と方法 1 の違いは、不均衡が見つかった場合に、グローバル変数 res を変更するのではなく、直接 -1 を返して計算を終了することです。そうすることで計算が早期に終了し、不必要な再帰呼び出しが回避され、結果がより早く決定される可能性があります。

操作結果:

 

おすすめ

転載: blog.csdn.net/qq_62799214/article/details/132273942