Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、前言
刷题啊!!!
开始刷 “剑指 Offer” 31天。刷完时间:2022.3.6 ~ 2022.3.20。
二、题目
(1)剑指 Offer 55 - II. 平衡二叉树
题目描述
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
限制:0 <= 树的结点个数 <= 10000
题解
题意:左右子树高度差不超过 1, 即 <= 1。
思路: 0. 左子树是否平衡、右子树是否平衡
- 获取左右子树高度,对比高度差
- 递归子树
AC 代码如下:
class Solution {
public boolean isBalanced(TreeNode root) {
if (null == root) return true;
return isBalanced(root.left) && isBalanced(root.right)
&& Math.abs(maxDepthWithRecursive(root.left) - maxDepthWithRecursive(root.right)) <= 1;
}
int maxDepthWithRecursive(TreeNode root) {
if (root == null) return 0;
return Math.max(maxDepthWithRecursive(root.left),
maxDepthWithRecursive(root.right)) + 1;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}