剑指offer-39.平衡二叉树

放肆的年华 提交于 2020-01-25 18:52:42

题目描述

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

解题思路:

1、如果是空树,则是一颗平衡二叉树;
2、递归遍历左右子树,如果深度之差的绝对值大于1,返回-1;
3、否则返回树的深度,是一颗平衡二叉树

代码实现:

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        /*
        解题思路:
        1、如果是空树,则是一颗平衡二叉树;
        2、递归遍历左右子树,如果深度之差的绝对值大于1,返回-1;
        3、否则返回树的深度,是一颗平衡二叉树
        */
        return TreeDepth(root)!=-1;
    }
    int TreeDepth(TreeNode root){
        if(root==null){
            return 0;
        }
        int leftDepth,rightDepth;
        leftDepth = TreeDepth(root.left);
        rightDepth = TreeDepth(root.right);
        if(leftDepth == -1 || rightDepth == -1 || Math.abs(leftDepth-rightDepth) > 1){
            return -1;
        }else{
            return (leftDepth>rightDepth?leftDepth:rightDepth)+1;
        }
    }
}

 效率:

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!