平衡二叉树

平衡二叉树

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;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-04 15:20
牛客61197583...:看到室友一个个没怎么学通过关系直接入职或者接到面试,真的很难受。八股不知道背了多少遍,hot100也刷了1.5遍了,但就是没有面试的机会,唉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务