0
点赞
收藏
分享

微信扫一扫

LeetCode 练习——110. 平衡二叉树

小暴龙要抱抱 2022-01-09 阅读 59

文章目录

1.题目描述

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

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

2.思路

2.1 代码

平衡二叉树需要满足两个条件:

  1. 左子树和右子树同时为平衡二叉树
  2. 左子树和右子树的高度差绝对值小于2

因此根据这两个条件,使用类TreeInfo存储子树信息,TreeInfo类中变量有该子树的高度以及该子树是否平衡。然后利用TreeInfo进行递归最后得到输入变量是否平衡,代码如下:

class Solution {
    public boolean isBalanced(TreeNode root) {
      return process(root).isBalanced;
    }

  public TreeInfo process(TreeNode root) {
    if (root == null) {
      return new TreeInfo(0, true);
    }
    TreeInfo leftInfo = process(root.left);
    TreeInfo rightInfo = process(root.right);
    int depth = Math.max(leftInfo.depth, rightInfo.depth) + 1;
    boolean isBalanced = Math.abs(leftInfo.depth - rightInfo.depth) < 2 && leftInfo.isBalanced && rightInfo.isBalanced;
    return new TreeInfo(depth, isBalanced);
  }
  static class TreeInfo{
    int depth;
    boolean isBalanced;

    public TreeInfo(int depth, boolean isBalanced) {
      this.depth = depth;
      this.isBalanced = isBalanced;
    }
  }
}

2.2 测试结果

测试通过
在这里插入图片描述

3.总结

平衡二叉树需要满足以下两个条件

  • 左子树和右子树同时为平衡二叉树
  • 左子树和右子树的高度差绝对值小于2
举报

相关推荐

0 条评论