LeetCode 二叉树的最大深度

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

一、题目描述:

104. 二叉树的最大深度 - 力扣(LeetCode) (leetcode-cn.com)

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

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

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

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

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

二、思路分析:

自顶向下的递归,总体思路是:最终结果可以由根节点到叶子节点一步步累计得出。 所以先预设结果数值,从根节点向下,每向下一次就更新一次结果数值,直到下降到叶子节点,就得到了这条线的深度。各条线的深度取最大值,就是根节点最大深度。 显然这是一种前序遍历(根→左→右):

三、AC 代码:

class Solution:
    def maxDepth(self, root: TreeNode) -> int: 
        # 自顶向下
        self.rst = 1 if root else 0 ## 预设结果值
        def func(node,length):
            if node==None: ## 若节点为None
                return
            elif node!=None and node.left==node.right==None: ## 若节点为叶子节点
                self.rst = max(self.rst,length) ## 取较大的深度为结果值并停止递归
                return
            elif node!=None and ~(node.left==node.right==None): ##若节点为非叶子节点
                length = length+1 ## 当前线路深度+1
                func(node.left,length) ## 传递深度值参数,向下继续访问
                func(node.right,length) ## 传递深度值参数,向下继续访问
        func(root,self.rst)
        return self.rst

class Solution:
    def maxDepth(self, root: TreeNode) -> int: 
        # 自顶向下
        self.rst = 0
        def func(node,length):
            if node == None:
                self.rst = max(length,self.rst)
                return
            elif node != None:
                func(node.left,length+1)
                func(node.right,length+1)
        func(root,self.rst)
        return self.rst

范文参考:

一篇文章带你吃透对称性递归(思路分析+解题模板+案例解读) - 二叉树的最大深度 - 力扣(LeetCode)

典型的回溯思想,操作完,退回,计算并保留每个路径的最大深度,最后返回即可 - 二叉树的最大深度 - 力扣(LeetCode)