程式碼隨想錄演算法訓練營第十五天 | 110.平衡二叉樹

Y荷兰豆Y發表於2024-06-27

110.平衡二叉樹

題目:給定一個二叉樹,判斷它是否是 平衡二叉樹

解題:
思路:判斷左右孩子的高度差是否超過1
報錯:1.單獨求樹的高度的遞迴函式,不然返回高度和返回布林值混淆了;

點選檢視程式碼
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        height=self.getheight(root)
        if height==-1:
            return False
        else:
            return True
    def getheight(self,root: Optional[TreeNode]): 
        if root is None:
            return 0
        leftheight=self.getheight(root.left)
        rightheight=self.getheight(root.right)
        if abs(leftheight-rightheight)>1:
            return -1
        return 1+max(leftheight,rightheight)

2.上面這個版本又出現一個錯誤:如果一個子樹不平衡(即高度返回 -1),你的程式碼仍然繼續計算另一個子樹的高度,並試圖計算其高度差,這導致了邏輯錯誤,可能會出現比如0和-1,那可能又對了。所以每次獲取左子樹或右子樹高度時檢查它們是否返回 -1。如果是這樣,立即返回 -1 以停止進一步計算。

點選檢視程式碼
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        height=self.getheight(root)
        if height==-1:
            return False
        else:
            return True
    def getheight(self,root: Optional[TreeNode]): 
        if root is None:
            return 0
        leftheight=self.getheight(root.left)
        if leftheight==-1:
            return -1
        rightheight=self.getheight(root.right)
        if rightheight==-1:
            return -1
        if abs(leftheight-rightheight)>1:
            return -1
        return 1+max(leftheight,rightheight)

相關文章