• 平衡二叉树


    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;
         
         
     }
    
  • 相关阅读:
    HDU1575--Tr A(矩阵快速幂)
    HDU 2147--HDU 2147(博弈)--我可能做了假题。。。
    新年第一发--HDU1848--Fibonacci again and again(SG函数)
    【转】你真的会二分查找吗?
    windows与ubuntu双系统的安装
    bestcoder#9--1001--Lotus and Characters
    PC端的混合应用通讯问题
    JS构造函数详解
    JS的prototype的共享机制分析
    使用a标签直接下载图片
  • 原文地址:https://www.cnblogs.com/SunAlbert/p/13489890.html
Copyright © 2020-2023  润新知