91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何求出python二叉樹的深度

發布時間:2021-12-13 15:49:16 來源:億速云 閱讀:360 作者:柒染 欄目:大數據

今天就跟大家聊聊有關如何求出python二叉樹的深度,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

題目描述

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

  • 節點總數 <= 10000

題目樣例

示例

給定二叉樹 [3,9,20,null,null,15,7],

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

題目思考

  1. 如果限制只能用遞歸或者迭代, 如何解決?

解決方案

方案 1

思路
  • 先考慮遞歸做法, 嘗試 DFS
  • 我們可以這樣構造遞歸方法: 傳入節點, 返回當前節點的深度, 該深度是左右子樹的最大深度+1
  • 假設葉子節點的深度為 1, 顯然根節點的深度就是整個樹的最大深度了
  • 遞歸出口即節點為空的情況, 此時深度為 0
復雜度
  • 時間復雜度 O(N): 需要遍歷整個樹
  • 空間復雜度 O(H): H 表示樹的高度, 也即遞歸的棧的消耗
代碼
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            # 遞歸出口, 空節點的情況
            return 0
        # 當前節點深度是左右子樹的最大深度+1
        return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
        # 也可以進一步簡化為只需要一行代碼..
        # return 0 if not root else 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
 

方案 2

思路
  • 如果要求必須用迭代方式實現, 那方案 1 就不行了
  • 迭代一般可以先嘗試 BFS, 這道題也不例外
  • 通過分析題目, 顯然這里的深度就是指 BFS 的層數, 所以完全可以利用                       劍指 Offer 32 - II. 從上到下打印二叉樹 II - leetcode 劍指 offer 系列的做法得出層數, 只是不需要打印出每一層的節點, 只需要統計層數即可. 不清楚的同學可以先看看那道題的思路~
  • 下面代碼對必要的步驟有詳細的解釋, 方便大家理解
復雜度
  • 時間復雜度 O(N): 需要遍歷整個樹
  • 空間復雜度 O(N): 隊列的空間消耗
代碼
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        q = [root]
        res = 0
        while q:
            # 當前層節點數目
            curlen = len(q)
            for node in q[:curlen]:
                # 只追加非空子節點
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            # 隊列切片, 開始處理下一層
            q = q[curlen:]
            # 當前層遍歷完畢, 深度+1
            res += 1
        return res
 

看完上述內容,你們對如何求出python二叉樹的深度有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼木县| 潍坊市| 嘉义县| 藁城市| 漾濞| 花莲市| 寿光市| 葵青区| 锡林浩特市| 靖州| 花垣县| 平塘县| 顺义区| 福海县| 綦江县| 清河县| 新兴县| 凤阳县| 略阳县| 靖安县| 泸水县| 长泰县| 宁南县| 仪征市| 弥渡县| 乌兰浩特市| 钟山县| 裕民县| 清徐县| 莲花县| 贵溪市| 栾川县| 剑阁县| 广元市| 瑞丽市| 山丹县| 霍城县| 神木县| 湄潭县| 靖安县| 卓资县|