平衡二叉树 剑指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

只是不明白为什么不用比较值之间的关系。。

猜你喜欢

转载自blog.csdn.net/qq_41359265/article/details/84224485