平衡二叉樹 劍指offer python
阿新 • • 發佈:2018-12-22
第一次寫是從上向下遍歷,但是這會導致很多不必要的判斷,程式碼如下:
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def IsBalanced_Solution(self, pRoot): # write code here if not pRoot: return True if abs(self.treeDepth(pRoot.left) - self.treeDepth(pRoot.right))<=1 and self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right): return True return False def treeDepth(self,pRoot): if not pRoot: return 0 left = self.treeDepth(pRoot.left) right = self.treeDepth(pRoot.right) return max(left,right) + 1
如果改為從下向上遍歷就可以很好的解決這個問題,,就不會出現重複判斷的問題了:
class Solution: def IsBalanced_Solution(self, pRoot): # write code here return self.getDepth(pRoot) != -1 def getDepth(self,pRoot): if not pRoot: return 0 left = self.getDepth(pRoot.left) if left == -1: return -1 right = self.getDepth(pRoot.right) if right == -1: return -1 if abs(left - right) > 1: return -1 return max(left,right) + 1
只是不明白為什麼不用比較值之間的關係。。