题解 | #判断是不是平衡二叉树#

判断是不是平衡二叉树

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

思路:

平衡二叉树任意节点两边的子树深度相差绝对值不会超过1,且每个子树都满足这个条件,那我们可以对每个节点找到两边的深度以后:

int deep(TreeNode root){
    if(root == null) 
        return 0;
    int left = deep(root.left); 
    int right = deep(root.right);
    //子树最大深度加上自己
    return (left > right) ? left + 1 : right + 1; 
}

判断是否两边相差绝对值超过1:

//左子树深度减去右子树相差绝对值大于1
if(left - right > 1 || left - right < -1) 
    return false;

然后因为每个子树都满足这个条件,我们还需要遍历二叉树每个节点当成一棵子树进行判断,而对于每个每个节点判断后,其子节点就是子问题,因此可以用递归。

IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);

具体做法:

step 1:第一个函数递归遍历二叉树所有节点。

step 2:对于每个节点判断,调用第二个函数获取子树深度。

step 3:第二个函数递归获取子树深度,只需要不断往子节点深度遍历,累加左右深度的较大值。

step 4:根据深度判断该节点下的子树是否为平衡二叉树。

class Solution {
public:
    int depth(TreeNode* pRoot)
    {
        if(!pRoot)
            return 0;
        return max(depth(pRoot->left),depth(pRoot->right))+1;
    }
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if(!pRoot)
            return true;
        if(abs(depth(pRoot->left)-depth(pRoot->right)) > 1)
            return false;
        return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务