平衡二叉树,c++

平衡二叉树

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

class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {

        auto res = find_deep(pRoot);
        if (res == -1)
            return false;
        else
            return true;
    }

    int find_deep(TreeNode* pRoot){
        if (pRoot == nullptr)
            return 0;
        auto right = find_deep(pRoot->right);
        auto left = find_deep(pRoot->left);
        if (right == -1 || left == -1)
            return -1;
        if (abs(right - left) > 1)
            return -1 ;
        else
            return max(right, left) + 1;
    }
};

平衡二叉树的性质是:是一颗空树或者左右高度差不超过1,且其子树都是平衡二叉树,由性质联想递归方法。
看了一下大家的思路,还是有点相似的。
1、递归函数的作用是判断当前节点的深度同时判断其是否为平衡树,
(1)当左右深度差值超过1,return -1;否则return 树深度
(2)若一个节点的一个子树已经不平衡,则直接返回 -1
2、感觉这样的递归在判断一个子树返回 -1后,其他线路的节点还在继续判断,不能提前终止,没想到啥好方法。
欢迎交流指正!!!

全部评论
17行可以拆成两句分别放在15行和16行后面,相当于剪枝
点赞 回复 分享
发布于 2020-03-27 22:03

相关推荐

05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求职打法:注意把武大标粗标大 本地你俩不是乱杀
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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