Balance Binary Tree

来源:互联网 发布:mac如何全选照片 编辑:程序博客网 时间:2024/06/06 07:40

description:
Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Have you met this question in a real interview? Yes
Example
Given binary tree A = {3,9,20,#,#,15,7}, B = {3,#,20,15,7}

A) 3 B) 3
/ \ \
9 20 20
/ \ / \
15 7 15 7
The binary tree A is a height-balanced binary tree, but B is not.

这一道题使用了ResultType的方式,因为需要2个量(树深、平衡)来确定整个树的平衡性。

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */class ResultType {    public boolean isBalance;    public int maxDeepth;    public ResultType(boolean isBalance, int maxDeepth) {        this.isBalance = isBalance;        this.maxDeepth = maxDeepth;    }}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 util(root).isBalance;    }    private ResultType util(TreeNode root) {        if (root == null) {            return new ResultType(true, 0);        }        ResultType right = util(root.right);        ResultType left = util(root.left);        if (!right.isBalance || !left.isBalance) {            return new ResultType(false, -1);        }        if (Math.abs(right.maxDeepth - left.maxDeepth) > 1) {            return new ResultType(false, -1);        } else {            return new ResultType(true, Math.max(right.maxDeepth, left.maxDeepth) + 1);        }    }}
0 0
原创粉丝点击