平衡二叉树

offer_39

概要:平衡二叉树

题目描述

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

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

思路:

  • 平衡二叉树就是左右子树的高度差不超过1的树
    • 先计算左右子树的高度
      • 如果一棵树只有一个结点,那么它的深度为1;
      • 如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加1,加1是加(当前结点)根节点这一层也就是当前结点下面没有结点了,就返回0,然后根据栈弹出,会加上当前这一层,这个+1 就是当前这一层
      • 如果既有左子树又有右子树,那么树的深度应该是左、右子树中深度较大的值再加1
    • 然后计算高度差
    • 最后看高度差来返回结果

image-20200812112614256

代码实现:

    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null) return true;
        //获取左子树的深度,注意,传入的是当前树的左子节点
        int left = getDepth(root.left);
        //获取右子树的深度。传入的是当前树的右子节点
        int right = getDepth(root.right);
        //如果左右子树的深度的差值>1 就说明不是平衡二叉树
        return Math.abs(left - right) > 1? false: true;
      
    }
    //获取树的深度
 public int   getDepth(TreeNode root){//传入的是当前树的头结点,把头结点在的这一层代表深度为1,所以后面要加上当前层也就是+1
     
  return (root == null)? 0: Math.max(getDepth(root.left),getDepth(root.right))+1;
     
     
 }
原文地址:https://www.cnblogs.com/SunAlbert/p/13489890.html