力扣 104题 二叉树的最大深度 个人题解

先看题目:

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

       3
      / \
    9  20
   / \
15 7
返回它的最大深度 3 。

我们可以分析一下,要找的是最大深度,以根节点为例,3就是根节点,深度为1,9和20都是子节点,深度为2,最后的15和7是叶子节点,深度为3。

思考一个问题:可不可以从root根节点出发,找他下一层的子树是否为叶子节点?然后依次递推,如果不是叶子节点就继续向下遍历,直到遇到叶子节点为止。每往下一层就会产生当前一层的深度。

又有一个问题,二叉树遍历会有root.left和root.right两个方向的遍历,那我们应该做什么?就是遍历完了之后求出左边和右边的最大值,这个题就做出来了。

其实这种思路有一个很有趣的地方:即最后的问题分解为了一个个的子问题。这也就是后面动态规划的思想。最后子问题求解完,我们要的问题就自然求解出来了。

上代码:

class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) {
            return 0;
        } else {
            int left = maxDepth(root.left);
            int right = maxDepth(root.right);
            return Math.max(left, right) + 1;
        }
    }
}

  最后return那里的+1其实就是每一层当前的深度+1,就是他这里本来的深度。这样,你会发现这个问题就解决了。

上一篇:Linux - tr命令,sort命令,uniq命令,cut命令


下一篇:JSP web应用程序开发教程实验一