【Leetcode】104. 二叉树的最大深度

98 阅读1分钟

题目描述

在这里插入图片描述

// 104. 二叉树的最大深度


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

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

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

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

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


题解

// 这道题跟【剑指offer】55. 二叉树的深度 一模一样。
// 前序遍历
// 前序遍历,deep记录当前深度,max记录deep中的最大深度。
// 往左右子树走deep+1,返回父结点deep-1。最后返回max
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:38.5 MB, 在所有 Java 提交中击败了49.78%的用户
class Solution {
    int max = 0;
    int deep = 0;

    public int maxDepth(TreeNode root) {
        if (root == null)
            return max;
        this.max = 1;
        this.deep = 1;
        preOrder(root);
        return max;
    }

    private void preOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        if (root.left != null) {
            max = Math.max(++deep, max);
            preOrder(root.left);
            deep--;
        }
        if (root.right != null) {
            max = Math.max(++deep, max);
            preOrder(root.right);
            deep--;
        }
    }
}


// 直接递归

// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:38.5 MB, 在所有 Java 提交中击败了49.78%的用户
class Solution {
	public int maxDepth(TreeNode root) {
		if (root == null)
			return 0;
		int left = maxDepth(root.left);
		int right = maxDepth(root.right);
		return (left > right) ? left + 1 : right + 1;
    }
}



// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:38.1 MB, 在所有 Java 提交中击败了92.03%的用户
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
		int left = maxDepth(root.left);
		int right = maxDepth(root.right);
		return Math.max(left, right) + 1;
    }
}