为什么我的代码超时(leetcode104)
Why my code is Time Limit Exceeded (leetcode104)
我正在 leetcode 104
做一些练习
描述: 给定一棵二叉树,找出它的最大深度。
最大深度是从根节点到最远叶节点的最长路径上的节点数。
这是我的解决方案
public int maxDepth(TreeNode root) {
if(root ==null ) {
return 0 ;
}
return ( maxDepth(root.left)+1) > (maxDepth(root.right)+1 ) ?
(maxDepth(root.left)+1):(maxDepth(root.right)+1);
}
但它会抛出 Time Limit Exceeded
。
然后我改成了这个,运行良好,接受了
public int maxDepth(TreeNode root) {
if(root ==null ) {
return 0 ;
}
int left = maxDepth(root.left)+1;
int right = maxDepth(root.right) +1 ;
return left > right ? left :right ;
}
但我认为它们没有任何区别。请帮助我理解我在哪里犯了错误。
感谢您的指导,干杯!
大概调用了四个方法
(maxDepth(root.left)+1) > (maxDepth(root.right)+1 ) ?
(maxDepth(root.left)+1):(maxDepth(root.right)+1)
这里调用了 maxDepth 方法 4 次,效率不高。
root.left 和 root.right 的计算是不必要的重复递归调用。尝试通过减少方法调用的次数来思考和优化您的解决方案,这将使您的代码在内部执行得更快。
您的第二个代码片段仅涉及 2 个递归方法调用,使其成为性能更好的解决方案。
您甚至可以使用更简单的解决方案:
if (root == null) {
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
我正在 leetcode 104
做一些练习描述: 给定一棵二叉树,找出它的最大深度。 最大深度是从根节点到最远叶节点的最长路径上的节点数。
这是我的解决方案
public int maxDepth(TreeNode root) {
if(root ==null ) {
return 0 ;
}
return ( maxDepth(root.left)+1) > (maxDepth(root.right)+1 ) ?
(maxDepth(root.left)+1):(maxDepth(root.right)+1);
}
但它会抛出 Time Limit Exceeded
。
然后我改成了这个,运行良好,接受了
public int maxDepth(TreeNode root) {
if(root ==null ) {
return 0 ;
}
int left = maxDepth(root.left)+1;
int right = maxDepth(root.right) +1 ;
return left > right ? left :right ;
}
但我认为它们没有任何区别。请帮助我理解我在哪里犯了错误。 感谢您的指导,干杯!
大概调用了四个方法
(maxDepth(root.left)+1) > (maxDepth(root.right)+1 ) ?
(maxDepth(root.left)+1):(maxDepth(root.right)+1)
这里调用了 maxDepth 方法 4 次,效率不高。
root.left 和 root.right 的计算是不必要的重复递归调用。尝试通过减少方法调用的次数来思考和优化您的解决方案,这将使您的代码在内部执行得更快。
您的第二个代码片段仅涉及 2 个递归方法调用,使其成为性能更好的解决方案。
您甚至可以使用更简单的解决方案:
if (root == null) {
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;