持续创作,加速成长!这是我参与「掘金日新计划 · 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)