我正在leetcode 104
解决一些练习Desciption: 给定二叉树,找到它的最大深度。 最大深度是从根节点到最远叶节点的最长路径上的节点数。
这是我的解决方案
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 ;
}
但我不认为他们有任何分歧。请帮我解决我犯错误的地方。 感谢您的导游,干杯!
答案 0 :(得分:1)
可能有四种方法调用
(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;