1. 問題描述:
給定一個 N 叉樹,找到其最大深度。最大深度是指從根節點到最遠葉子節點的最長路徑上的節點總數。N 叉樹輸入按層序周遊序列化表示,每組子節點由空值分隔(請參見示例)。
示例 1:
輸入:root = [1,null,3,2,4,null,5,6]
輸出:3
示例 2:
輸入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
輸出:5
提示:
樹的深度不會超過 1000 。
樹的節點數目位于 [0, 10 ^ 4] 之間。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree
2. 思路分析:
分析題目可以知道我們遞歸N叉樹即可,在遞歸的時候維護目前節點的深度,并且需要聲明一個全局變量來記錄目前的N叉樹的最大深度res,在遞歸的時候更新res即可。第二種寫法是求解每一個子節點的最大深度。
3. 代碼如下:
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
res = 0
def dfs(self, root: Node, d: int):
if not root: return
if d > self.res: self.res = d
for child in root.children:
self.dfs(child, d + 1)
def maxDepth(self, root: 'Node') -> int:
self.dfs(root, 1)
return self.res
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
def dfs(self, root: Node, d: int):
if not root: return 0
res = 0
# 求解每一個子節點的最大深度
for child in root.children:
res = max(res, self.dfs(child, d + 1))
return res + 1
def maxDepth(self, root: 'Node') -> int:
return self.dfs(root, 0)