会写最简单的:到根节点时判断左右子树高度
代码如下:
class Solution:
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
if not pRoot:
return True
if not self.IsBalanced_Solution(pRoot.left) or not self.IsBalanced_Solution(pRoot.right):
return False
left = self.getHeight(pRoot.left)
right = self.getHeight(pRoot.right)
return True if abs(left - right) <= 1 else False
def getHeight(self, root: TreeNode) -> int:
if not root:
return 0
left = self.getHeight(root.left)
right = self.getHeight(root.right)
return max(left, right) + 1
但是这种做法每到一个根节点就遍历子树,开销很大
看了官解才知道这是自顶向下的做法
除此之外还有自底向上的做法,在回溯的过程中判断是否满足条件
代码如下:
class Solution:
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
return self.depth(pRoot) != -1
def depth(self, root: TreeNode) -> int:
if not root:
return 0
left = self.depth(root.left)
if left == -1:
return -1
right = self.depth(root.right)
if right == -1:
return -1
if abs(left - right) > 1:
return -1
return max(left, right) + 1
除了妙啊我什么都不会