中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何求出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

舒兰市| 广河县| 临夏县| 巍山| 达日县| 景洪市| 阳春市| 神池县| 咸宁市| 河间市| 菏泽市| 扶绥县| 白朗县| 襄垣县| 额尔古纳市| 阿坝县| 镇坪县| 河西区| 凤城市| 农安县| 吴桥县| 精河县| 麻栗坡县| 习水县| 吴旗县| 晋州市| 鲁甸县| 彝良县| 都昌县| 行唐县| 平远县| 宝山区| 武乡县| 石阡县| 长子县| 瓮安县| 淄博市| 库尔勒市| 青岛市| 永平县| 芷江|