JZ79 判断是不是平衡二叉树
题源 👉 判断是不是平衡二叉树_牛客题霸_牛客网 (nowcoder.com)
题目描述:
具体实现:
方法一:递归
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int l = deep(root.left);
int r = deep(root.right);
// 左右子树还要平衡
if(IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right) && Math.abs(l - r) < 2)
return true;
return false;
}
public int deep(TreeNode root){
if(root == null) return 0;
int l = deep(root.left);
int r = deep(root.right);
return Math.max(l, r)+1;
// return Math.max(deep(root.left), deep(root.right))+1;
}
}
时间:O(n2)
空间:O(n) 递归占用栈
方法二:自底向上👉 题解 | #判断是不是平衡二叉树#_牛客博客 (nowcoder.net)
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int a = d(root);
if(a == -1) return false;
return true;
// return getdepth(root) != -1;
}
public int d(TreeNode root){
if(root == null) return 0;
int l = d(root.left);
if(l < 0) return -1;
int r = d(root.right);
if(r < 0) return -1;
return Math.abs(l - r) > 1 ? -1 : Math.max(l, r)+1;
}
}