Leetcode110.平衡二叉树

Leetcode110.平衡二叉树

题目描述

/**
     * 给定一个二叉树,判断它是否是高度平衡的二叉树。
     *
     * 本题中,一棵高度平衡二叉树定义为:
     *
     * 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
     */

思路分析

  1. 高度平衡的二叉树,即平衡二叉树,平衡二叉树的左右子树的高度值相差小于1
  2. 判断一棵树是否为平衡二叉树,除了判断左右子树的高度值满足条件,还有判断其左右子树是否也为平衡二叉树
  3. 求二叉树的高度,可以使用递归的思路,根节点的高度等于左右子树的高度值最大值 + 1
  4. 详解见下

源码及分析

 /**
     *
     * @param root 根节点
     * @return
     */
    public boolean isBalanced(TreeNode root) {
        if (root == null){
            return true;
        }else {
            //判断一棵树是否是平衡二叉树
            //1.左右子树的高度值差小于1
            //2.左子树平衡
            //3.右子树也平衡
            return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
        }

    }
    //编写方法计算二叉树的高度
    public int height(TreeNode root){
        if (root == null){
            return 0;
        }else {
            //当前节点的左右子树高度值的较大值 + 1
            return Math.max(height(root.left),height(root.right)) + 1;
        }
    }

posted @ 2021-09-10 09:24  mx_info  阅读(26)  评论(0)    收藏  举报