第一次写是从上向下遍历,但是这会导致很多不必要的判断,代码如下:
# -*- 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
只是不明白为什么不用比较值之间的关系。。