バイナリツリーはバランスされているかどうか

件名の説明:

所与のバイナリツリーがバランスされているかどうかを決定します

この問題では、バランスの取れた二分木、バイナリ1の絶対値を超えない、約2サブレベル差の各ノードとして定義されます

平衡二分木:それは高さ空のツリーまたはその2つの左の差の絶対値ではなく1以下の右サブツリーであり、左右のサブツリーが平衡二分木です。

問題解決のアイデア:

主な方法は、1以上、左及び右サブツリーもバイナリツリーをバランスされていない約2サブツリーの再帰のみバランスバイナリツリーの深さです。

左と右のサブツリーの深さとの差であるツリーのルートノードが現在のノードが1より大きいされる分析します

1より大きい場合には、証明はバランスバイナリツリー、ダイレクトリターン偽ではありません。

そうでない場合には1、その左サブツリーが右の子であるかどうかを決定する必要があり、バランスの取れた二分木は、平衡二分木(再帰的)であるか否か、

 

 

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    //返回二叉树的最大深度
    public int maxnum(TreeNode root) {
        if(root == null)
            return 0;
        return Math.max(maxnum(root.left),maxnum(root.right))+1;
    }
    
    public boolean isBalanced(TreeNode root) {
        if(root == null)
            return true;
        //左右子树深度之差
        int lr = Math.abs(maxnum(root.left)-maxnum(root.right));
        //左右子树深度之差大于1就不是平衡树
        if(lr <= 1){
            return isBalanced(root.left)&&isBalanced(root.right);
        }
        else{
            return false;
        }
    }
}

 

公開された52元の記事 ウォンの賞賛6 ビュー8987

おすすめ

転載: blog.csdn.net/PMPWDF/article/details/104043248