算法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

posted on 2025-06-19 17:54  sakura430  阅读(10)  评论(0)    收藏  举报