max()和?:运算符之间的时序比较

时间:2017-09-15 16:41:08

标签: c++

我编写了一个函数来返回二叉树的最大深度。

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);

第二种方法在第一种方法通过时失败了时序检查。 他们看起来很像我。 任何人都可以提供一些提示,为什么第二种方法更慢?

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中调用第三次(取决于条件的结果)。这浪费了重新计算价值的时间。

根据树的状态,这种方法可能需要与第一种方法相同的时间,和第一种方法的两倍。