LeetCodeEasy-【面試題55 - I. 二叉樹的深度】

輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度爲樹的深度。

例如:
給定二叉樹 [3,9,20,null,null,15,7],
在這裏插入圖片描述
返回它的最大深度 3 。

提示:
節點總數 <= 10000
注意:本題與主站 104 題相同:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路1:樹的遍歷

對樹進行遍歷,藉助dp的思想:深度 = max(左子樹的深度, 右子樹的深度)+1
在這裏插入圖片描述

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        def dfs(root):
            if root == None:
                return 0 
            return max(dfs(root.left), dfs(root.right)) + 1
        return dfs(root)

思路2:層序遍歷

利用一個隊列將每一層的節點存起來,在下一層時,將父層的節點取出存入子節點。
在這裏插入圖片描述

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root == None:
            return 0 
        stack = [root]
        ans = 0
        while stack: # 遍歷當前層
            ans += 1
            temp = []
            # 將本層的子節點全部放入新的隊列
            for node in stack:
                if node.left:
                    temp.append(node.left)
                if node.right:
                    temp.append(node.right)
            stack = temp
            # print(stack)
        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章