平衡二叉树,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

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务