public static int checkHeight(TreeNode root){
if(root==null){
reuturn 0;//高度为0
}
/*检查左子树是否平衡*/
int leftHeight=checkHeight(root.left);
if(leftHeight==-1){
return -1;//不平衡
}
/*检查右子树是否平衡*/
int rightHeight=checkHeight(root.right);
if(rightHeight==-1){
return -1;//不平衡
}
/*检查当前节点是否平衡*/
int heightDiff=leftHeight-rightHeight;
if(Math.abs(heightDiff>1)){
return -1;
}else{
/*返回高度*/
return Math.max(leftHeight,rightHeight)+1;
}
}面试金典上的内容:
时间复杂度O(N),空间复杂度O(H)
public static boolean isBalanced(TreeNode root){
if(checkHieght(root==-1)){ return false; }else{ return true; }
}
本文介绍了如何使用递归方法实现树的平衡性检查和高度计算,重点关注时间复杂度为O(N)和空间复杂度为O(H)的算法。通过深度优先搜索遍历整棵树,确保每个节点的左右子树高度之差不超过1,以此判断树的平衡状态。
310

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



