学习目标:
剑指 Offer 55 - II. 平衡二叉树
学习内容:
剑指 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 。
限制:
1 <= 树的结点个数 <= 10000
学习时间:
2020年12月
学习产出:
package 平衡二叉树;
/**
*
* @ClassName: Solution.java
* @Description:
* 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,
* 那么它就是一棵平衡二叉树。
* 返回左右子树的最大深度,判断高度差是否超过1
* @version: v1.0.0
* @author: 童梦君
* @date: 2020年12月15日 上午12:18:20
*
* Modification History:
Modification History:
* Date Author Version Description
*----------------------------------------------------------------*
* 2020年12月15日 童梦君 v1.0.0 修改原因
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
//递归终止条件:root结点为空时返回true
if(root==null)
return true;
//处理当前层逻辑:获得左右子树的高度
int left = maxDepth(root.left);
int right = maxDepth(root.right);
//下探到下一层
//判断该节点的左右子树深度差是否大于1,若是大于1则肯定不是平衡二叉树,然后继续递归左右子树根节点
return Math.abs(left-right)<=1 && isBalanced(root.left) && isBalanced(root.right) ? true : false;
}
public int maxDepth(TreeNode root) {
if(root==null)
return 0;
if(root.left==null&&root.right==null) {
return 1;
}
int ans = Integer.MIN_VALUE;
if(root.left!=null) {
ans = Math.max(maxDepth(root.left), ans);
}
if(root.right!=null) {
ans = Math.max(maxDepth(root.right), ans);
}
return ans+1;
}
}