剑指 Offer 55 - I. 二叉树的深度(104. 二叉树的最大深度)
题目:
思路:
【1】自而上的递归
代码展示:
自而上的递归的方式:
//时间0 ms击败100% //内存41.3 MB击败46.46% /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int maxDepth(TreeNode root) { if (root == null) return 0; int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right); return Math.max(leftHeight, rightHeight) + 1; } }
优化一下代码,因为用return里面存在调用栈的话有可能存在调用栈的深度没那么大:
尾递归的情况:因为函数在最后才进行递归,后面已经没有需要再计算的了,所以递归前面的局部变量无需进行保存。
因此,其实尾递归只需用到一层栈,每到下一层递归,当前层函数就退栈,下一层函数就入栈。
//时间0 ms击败100% //内存40.7 MB击败99.52% class Solution { public int maxDepth(TreeNode root) { if(root ==null) { return 0; } return Math.max(maxDepth(root.left) + 1, maxDepth(root.right) + 1); } }