算法day42 判断平衡二叉树
题目描述

解法:递归
二叉树问题大部分离不开递归,本题也一样。对于判断一棵树是否为平衡二叉树,我们要从平衡二叉树的定义的出发。一棵任意一部分子树的左右子树的度的差值的绝对值小于等于1,则它是一棵平衡二叉树。本题我们还是利用后序遍历,这样我们可以由底部向上搜寻获取高度(前序遍历是获得深度的概念),而在获取完每一小部分子树的高度差之后进行判断,若度的差值的绝对值大于1,返回-1,否则这一步获取的左右子树的高度的较大者(作为下一层级的子树的高度),最后将返回值赋值给result返回。若返回值等于-1,说明这棵二叉树的任意部分已经不满足平衡二叉树条件,故返回false,反之则为true。具体的代码如下。
int getheight(TreeNode *cur){
if(cur == nullptr) return 0;
int left_depth = getheight(cur->left);
if(left_depth == -1) return -1;
int right_depth = getheight(cur->right);
if(right_depth == -1) return -1;
int result;
if(abs(left_depth - right_depth)>1){
result = -1;
}else{
result = max(left_depth,right_depth)+1;
}
return result;
}
bool isBalanced(TreeNode* root) {
return getheight(root) == -1 ? false:true;
}
时间复杂度:O(n)
空间复杂度:O(h)
END
浙公网安备 33010602011771号