问题描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3 / 9 20 / 15 7
返回 true
。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1 / 2 2 / 3 3 / 4 4
返回 false
。
方法1:
通过求子树深度来求子树是否balance。left - right > 1 return False。递归遍历每一个节点。
1 class Solution(object): 2 def isBalanced(self, root): 3 """ 4 :type root: TreeNode 5 :rtype: bool 6 """ 7 if root == None: 8 return True 9 left = self.getDepth(root.left) 10 right = self.getDepth(root.right) 11 if abs(left - right) > 1: 12 return False 13 return self.isBalanced(root.left) and self.isBalanced(root.right) 14 def getDepth(self,root): 15 if root == None: 16 return 0 17 left = self.getDepth(root.left) 18 right = self.getDepth(root.right) 19 return max(left,right) + 1
变体:
1 class Solution(object): 2 def isBalanced(self, root): 3 """ 4 :type root: TreeNode 5 :rtype: bool 6 """ 7 def deep(root): 8 if not root: 9 return 0 10 l = deep(root.left) 11 r = deep(root.right) 12 if abs(l-r)>1: 13 self.flag = False 14 return max(l,r)+1 15 16 self.flag=True 17 deep(root) 18 if self.flag == False: 19 return False 20 else: 21 return True
2018-09-09 18:24:35