

地址:https://leetcode.cn/problems/balanced-binary-tree/description/
/**
* Definition for a binary tree node.
* public 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;
* }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
//首先判断的就是根节点
if(root == null) {
return true;
}
//然后判断的是左节点
return isHeight(root) >= 0;
}
public int isHeight(TreeNode root){
if(root == null) {
return 0;
}
int lf = isHeight(root.left);
//如果说你这个中间已经不是平衡二叉树了就可以直接返回-1,进行判断了
if(lf < 0) {
return -1;
}
int rf = isHeight(root.right);
if(rf >= 0 && lf >= 0 && Math.abs(lf-rf) <= 1){
return Math.max(lf,rf) + 1;
}else {
return -1;
}
}
}二叉树的 “高度” 指从当前节点到其最远叶子节点的路径上的节点数量。例如:
具体步骤如下: 步骤 1:处理空树
步骤 2:递归计算左子树高度
步骤 4:判断当前节点是否平衡 比较左、右子树的高度差:
步骤 5:最终判断整棵树是否平衡
这个题 很简单就是说白了,依旧是用递归然后,判断他的高度,然后返回高度值是多少,然后判断高度差的绝对值是不是1 ,这里加了一个就很好的点是什么,一开始是没有在下面这个,按这个的时间复杂度是O(n*n),因为有重复的计算,但是加了一个这个再每一次递归的走到这里的时候就可以重新判断高度差是不是好是1,如果不是直接结束了
//的核心作用是提前终止无效递归,避免重复计算,从而将时间复杂度从 O (n²) 优化到 O (n)。
if(lf < 0) {
return -1;
}