平衡二叉树

平衡二叉树

http://www.nowcoder.com/questionTerminal/8b3b95850edb4115918ecebdf1b4d222

题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

解法

    //解法:后序遍历+减枝
    // 时间O(N) 空间O(N)
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if (pRoot == nullptr) return true;
        return RecIsBalanced(pRoot) != -1;
    }
    //递归看root及其子树是否为平衡二叉树。若是,返回root树高;若任意子树不是,则返回-1(剪枝).
    int RecIsBalanced(TreeNode* pRoot) {
        if (pRoot == nullptr) return 0;
        int left = RecIsBalanced(pRoot->left);
        if (left == -1) return -1;
        int right = RecIsBalanced(pRoot->right);
        if (right == -1) return -1;
        if (abs(left - right) > 1) return -1;
        else return max(left, right) + 1;
    }
全部评论

相关推荐

赏个offer求你了:友塔HR还专门加我告诉我初筛不通过😂
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务