码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 110. Balanced Binary Tree

时间:2018-08-25 11:38:17      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:turn   回忆   int   roo   时间复杂度   tco   span   pre   root   

二叉树的问题,这里主要关心一下时间复杂度。

先回忆一下求二叉树深度的问题,T(n) = 2T(n/2)+1 -> O(n)

本题 T(n) = 2T(n/2) + O(n) -> O(nlogn)  最坏情况是O(n^2)

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if (root==NULL) return true;
        return isBalanced(root->left) && isBalanced(root->right) && abs(depth(root->left)-depth(root->right))<2;
    }
    
    int depth(TreeNode *root){
        if (root==NULL) return 0;
        return 1+max(depth(root->left),depth(root->right));
    }
};

 

可以继续优化,一旦发现子树不是平衡的,返回-1,最后只要判断 f(root)!=-1 就可以了

时间复杂度O(n),空间复杂度O(H)

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return depth(root)!=-1;
    }
    
    int depth(TreeNode *root){
        if (root==NULL) return 0;
        int left=depth(root->left);
        if (left==-1) return -1;
        int right=depth(root->right);
        if (right==-1) return -1;
        if (abs(left-right)>1) return -1;
        return 1+max(left,right);
    }
};

 

LeetCode 110. Balanced Binary Tree

标签:turn   回忆   int   roo   时间复杂度   tco   span   pre   root   

原文地址:https://www.cnblogs.com/hankunyan/p/9532691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!