天天看點

559 N 叉樹的最大深度(遞歸)

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)