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)