1. 程式人生 > >判斷二叉樹是否是高度平衡二叉樹

判斷二叉樹是否是高度平衡二叉樹

這道題是個easy,easy的基礎是已經知道怎麼求二叉樹的最大深度了(雖然這是一個基本功2333)如果知道怎麼求二叉樹最大深度,那麼這道題的思路可以是:

用遞迴Recursion,首先構建一個新的函式求樹的最大深度,然後求左子樹最大深度,右子樹最大深度,兩者之差大於1就return false,然後菜判斷左右子樹是不是分別依舊是高度平衡樹,結束。

如何求二叉樹的最大深度?

private int deepestHeight(TreeNode node){
        if(node == null) return 0;
        int lH = deepestHeight(node.left);
        int rH = deepestHeight(node.right);
        return lH>rH?lH+1 : rH+1;
    }

思路同樣是一個遞迴Recursion,分別求左右子樹的最大深度,誰深,誰再加1就是整棵樹的最大深度了。

知道怎麼求二叉樹的最大深度後就可以寫這道題了:

public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: True if this Binary tree is Balanced, or false.
     */
    public boolean isBalanced(TreeNode root) {
        if(root == null) return true;
        int left = deepestHeight(root.left);
        int right = deepestHeight(root.right);
        if(Math.abs(left-right)>1) return false;
        return isBalanced(root.left)&&isBalanced(root.right);
        
    }
    
    private int deepestHeight(TreeNode node){
        if(node == null) return 0;
        int lH = deepestHeight(node.left);
        int rH = deepestHeight(node.right);
        return lH>rH?lH+1 : rH+1;
    }
}