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

溫馨提示×

溫馨提示×

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

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

python中的平衡二叉樹該怎么理解

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

這期內容當中小編將會給大家帶來有關python中的平衡二叉樹該怎么理解,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

題目描述

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過 1,那么它就是一棵平衡二叉樹。

  • 1 <= 樹的結點個數 <= 10000
             

題目樣例

             

示例

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

    3
   / \
  9  20
    /  \
   15   7
返回 true 。
             
給定二叉樹 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
返回 false 。
                           

題目思考

  1. 可以只需要遍歷一遍節點得到結果嗎?
             

解決方案

             
思路
  • 有了昨天                 劍指 Offer 55 - I. 二叉樹的深度 - leetcode 劍指 offer 系列的鋪墊, 這道題相信大家都可以迎刃而解
  • 一個比較容易想到的思路是: 先計算出每個節點的深度, 并將其存入                 節點=>深度字典中; 然后再遍歷一遍節點, 針對每個節點, 判斷它左右子節點的深度是否滿足要求, 所有節點都滿足的話才說明平衡. 但是這種方案需要遍歷兩邊節點, 效率不太高, 如何一次性遍歷得出結果呢?
  • 回顧遞歸求深度的方案, 我們是先求得左右子樹的深度, 然后才進一步得到當前節點的深度, 所以我們就可以直接加一個全局變量記錄當前是否平衡, 并額外引入一個邏輯來比較子樹深度, 如果不滿足要求, 則直接把變量置為 false 直接返回即可
  • 注意本題并不適用于 BFS 迭代求深度的算法, 因為迭代方案求的是當前節點                 從上到下所在的層數, 每個節點并不知道自己的深度(從下往上, 從葉子節點到自身)究竟是多少, 所以無從判斷是否平衡
  • 下面代碼對必要的步驟有詳細的解釋, 方便大家理解
             
復雜度
  • 時間復雜度 O(N): 需要遍歷整個樹
  • 空間復雜度 O(H): H 表示樹的高度, 也即遞歸的棧的消耗
             
代碼
class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        # 遞歸, 邊求深度邊判斷, 返回深度, 全局變量標記當前是否平衡
        balance = True

        def getDepth(node):
            nonlocal balance
            if not node or not balance:
                # 遞歸出口: 如果節點為空或者不平衡, 返回0, 無需繼續遞歸了
                return 0
            ldepth = getDepth(node.left)
            rdepth = getDepth(node.right)
            if abs(ldepth - rdepth) > 1:
                # 不平衡, 全局變量設為false
                balance = False
            # 返回當前節點自身的深度
            return max(ldepth, rdepth) + 1

        getDepth(root)
        return balance
                           

上述就是小編為大家分享的python中的平衡二叉樹該怎么理解了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

桃园县| 文安县| 延川县| 江口县| 武强县| 屏东县| 泾川县| 和平区| 资溪县| 黄大仙区| 东兰县| 五大连池市| 勃利县| 望谟县| 双城市| 醴陵市| 尼木县| 类乌齐县| 闽清县| 岳阳县| 太康县| 平阴县| 益阳市| 乐安县| 西青区| 江孜县| 黄山市| 达拉特旗| 柏乡县| 白朗县| 吉安县| 鄂托克前旗| 永年县| 盐源县| 安吉县| 夏河县| 固始县| 金塔县| 舒城县| 杂多县| 嘉定区|