5 - Binary Tree & Tree-based DFS

93. Balanced Binary Tree

https://www.lintcode.com/problem/balanced-binary-tree/description?_from=ladder&&fromId=1

分治法:

方法一: with ResultType

class ResultType {
    boolean isBalanced;
    int maxDepth;
    ResultType(boolean isBalanced, int maxDepth) {
        this.isBalanced = isBalanced;
        this.maxDepth = maxDepth;
    }
}
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) {
        // write your code here
        return helper(root).isBalanced;
    }
    
    public ResultType helper(TreeNode root) {
        if(root == null) {
            return new ResultType(true, 0);
        }
        ResultType left = helper(root.left);
        ResultType right = helper(root.right);
        if(!left.isBalanced || !right.isBalanced) {
            return new ResultType(false, Math.max(left.maxDepth, right.maxDepth) + 1);
        }
        if(Math.abs(left.maxDepth - right.maxDepth) > 1) {
            return new ResultType(false, Math.max(left.maxDepth, right.maxDepth) + 1);
        }
        return new ResultType(true, Math.max(left.maxDepth, right.maxDepth) + 1);
    }
}

方法二:

 

上一篇:2021-06-02平衡树


下一篇:左神算法:判断二叉树是否为平衡二叉树(树形dp套路,Java版)