平衡二叉树

剑指Offer题解(Java实现)



1 题目描述


输入一棵二叉树,判断该二叉树是否是平衡二叉树。


2 思路


本题一个简单的思路是分别计算左右子树的深度,然后判断是否平衡。但这样会造成重复的计算。

这里采用后序遍历的思路,避免重复计算子树的深度。这里我做了一个小设计,isBalance 方法返回 -1 时表示该二叉树不平衡,返回其它值则表示该二叉树的深度。


3 代码实现


public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root==null){
            return true;
        }
        if(isBalance(root)==-1){
            return false;
        }
        return true;
    }
    
    private int isBalance(TreeNode root){
        if(root==null){
            return 0;
        }
        int left = isBalance(root.left);
        int right = isBalance(root.right);
        if(left!=-1 && right!=-1){
            int diff = left-right;
            if(diff>=-1&&diff<=1){
                return 1 + (left>right?left:right);
            }
        }
        return -1;
    }
}


 
comments powered by Disqus