怎样分析这个算法的时间/空间复杂度?
下面代码是判断一个二叉树是否是平衡二叉树,以这段代码所表达的算法为例,怎样去衡量他的时间/空间复杂度?(每到一个节点都去求他的深度,这样对于时间复杂度来说是不是太高了?)
PS:如果有更好的方法,Please show me your code^_^
class Solution {
public:
bool isBalanced(TreeNode *root) {
if(root==NULL)
return true;
if(abs(maxDepth(root->left)-maxDepth(root->right))>1)
return false;
else
return (isBalanced(root->left))&&(isBalanced(root->right));
}
int maxDepth(TreeNode *root)
{
if(root==NULL)
return 0;
return max(maxDepth(root->left),maxDepth(root->right))+1;
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
时间复杂度上我看是 O(n log n)。比如你拿到一个完全二叉树,那么最底层的每一个节点你都会访问 log n 次。
方法肯定是不好的。对于同一个 subtree 的高度你会去求很多次。存在 O(n) 的方法。
随手改一个也不怎么好的