Balanced Binary Tree(平衡二叉树)

问题

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.
Example
Given binary tree A = {3,9,20,#,#,15,7}, B = {3,#,20,15,7}

Balanced Binary Tree(平衡二叉树)_第1张图片

The binary tree A is a height-balanced binary tree, but B is not.

分析

想要知道某个节点是否符合,必须要知道这个节点下边的子节点高度。使用递归操作,方法getDepth(Node node)返回每个节点的高度。 这样通过调用方法,就能算出这个节点子节点的高度,然后就可以判断这个节点是否符合条件。递归即可完成操作。

代码

/**
 * 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;
 *     }
 * }
 */
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 getDepth(root)!=-1;
    }
    /**
     * -1代表非法,这个节点不平衡
     */
    private int  getDepth(TreeNode root){
        if(root==null){
            return 0;
        }
        int left=getDepth(root.left);
        int right=getDepth(root.right);
        if(Math.abs(left-right)>1||left==-1||right==-1){
            return -1;
        }
        return Math.max(left,right)+1;
    }
}

你可能感兴趣的:(Balanced Binary Tree(平衡二叉树))