我编写了一个函数来返回二叉树的最大深度。
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == 0) return 0;
if((root -> left ==0) &&(root->right == 0)) return 1;
**************
}
};
我为*****部分写了两个方法 方法一:
else return max((1+maxDepth(root -> left)),(1+maxDepth(root -> right)));
方法2:
else return (maxDepth(root -> left) > maxDepth(root -> right)) ?
(maxDepth(root->left) + 1):
(maxDepth(root->right) + 1);
第二种方法在第一种方法通过时失败了时序检查。 他们看起来很像我。 任何人都可以提供一些提示,为什么第二种方法更慢?
答案 0 :(得分:3)
第一种方法类似于:
else {
auto l = 1 + maxDepth(root -> left);
auto r = 1 + maxDepth(root -> left);
return (l > r) ? l : r;
}
请注意,maxDepth()
仅被调用两次。
在第二种方法中,maxDepth()
在条件表达式中被调用两次,然后在true-expression或false-expression中调用第三次(取决于条件的结果)。这浪费了重新计算价值的时间。
根据树的状态,这种方法可能需要与第一种方法相同的时间,和第一种方法的两倍。