题目

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

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

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

示例:

  1. 给定二叉树 [3,9,20,null,null,15,7],
  2. 3
  3. / \
  4. 9 20
  5. / \
  6. 15 7
  7. 返回它的最大深度 3

方案一(递归,自顶向下)

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
    ans := 0

    var max_depth = func(node *TreeNode, curr_depth int){}
    max_depth = func (node *TreeNode, curr_depth int) {
        if node != nil {
            if ans < curr_depth { ans = curr_depth }
            max_depth(node.Left, curr_depth + 1)
            max_depth(node.Right, curr_depth + 1)
        }
    }
    max_depth(root, 1)

    return ans
}

方案二(递归,自底向上)

func maxDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    if root.Left == nil && root.Right == nil {
        return 1
    }
    return 1 + max(maxDepth(root.Left), maxDepth(root.Right))
}

func max(a, b int) int {
    if a > b {
        return a
    }

    return b
}

原文

https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/3/solve-problems-recursively/12/