给定一个二叉树,判断它是否是高度平衡的二叉树
解法一 自顶向下 递归(大量重复计算,存在大量冗余)
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null)
return true;
int leftH = Height(root.left);
int rightH = Height(root.right);
if(Math.abs(leftH - rightH) > 1) {
return false;
}else{
return isBalanced(root.left) && isBalanced(root.right);
}
}
private int Height(TreeNode root){
if(root == null)
return 0;
int leftHeight = Height(root.left);
int rightHeight = Height(root.right);
return Math.max(leftHeight,rightHeight) + 1;
}
}
解法二 自底向上
class Solution {
public boolean isBalanced(TreeNode root) {
return recur(root) != -1;
}
private int recur(TreeNode root){
if(root == null)
return 0;
int left = recur(root.left);
if(left == -1)
return -1;
int right = recur(root.right);
if(right == -1)
return -1;
return Math.abs(left - right) < 2 ? Math.max(left,right) + 1 : -1;
}
}
本文探讨了二叉树是否为高度平衡的问题,提供了两种不同的递归算法:一种是自顶向下的递归方法,虽然直观但存在大量重复计算;另一种是自底向上的递归方法,能有效减少重复计算,提高效率。
967

被折叠的 条评论
为什么被折叠?



