今天在leetcode刷一道简单题,求二叉树的深度,链接如下:
剑指 Offer 25. 合并两个排序的链表
首先我很容易就想到了二叉树的深度遍历,用递归来实现,我的代码是这样:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution55 {
public int maxDepth(TreeNode root) {
if(root.left == null && root.right == null) return 1;
return 1 + maxDepth(root.left) > maxDepth(root.right) ? maxDepth(root.left) : maxDepth(root.right) ;
}
}
在leetcode提交,运行一个非常大的测试用例时报错了,提示超出时间限制。
于是我查看了参考答案,参考答案将三目运算符改成了使用Math.max()
函数,结果通过了,参考答案的函数部分代码如下:
if(root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
由此我分析,可能三目运算符在Java中需要消耗更多的运算量,因此以后刷题碰到需要比大小的时候,尽量还是选择用Math包中的max和min函数比较好,可以节省很多的运算时间,避免超时。