1. 程式人生 > >平衡二叉樹 劍指offer python

平衡二叉樹 劍指offer python

第一次寫是從上向下遍歷,但是這會導致很多不必要的判斷,程式碼如下:

# -*- 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

只是不明白為什麼不用比較值之間的關係。。