LeetCode110-平衡二叉树
原题链接:https://leetcode-cn.com/problems/balanced-binary-tree/,https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/
解题思路:递归。左右子树的高度差不大于1,且左右子树都是平衡二叉树
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, val=0, left=None, right=None): 4 # self.val = val 5 # self.left = left 6 # self.right = right 7 class Solution: 8 def isBalanced(self, root: TreeNode) -> bool: 9 def height(root: TreeNode) -> int: 10 if not root: 11 return 0 12 return max(height(root.left), height(root.right)) + 1 13 14 if not root: 15 return True 16 return abs(height(root.left) - height(root.right)) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)
另一种代码书写方式
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, val=0, left=None, right=None): 4 # self.val = val 5 # self.left = left 6 # self.right = right 7 class ReturnData: 8 def __init__(self, is_balanced, height): 9 self.is_balanced = is_balanced 10 self.height = height 11 12 class Solution: 13 def isBalanced(self, root: TreeNode) -> bool: 14 return self.process(root).is_balanced 15 16 def process(self, x: TreeNode) -> ReturnData: 17 if not x: 18 return ReturnData(True, 0) 19 leftData = self.process(x.left) 20 rightData = self.process(x.right) 21 height = max(leftData.height, rightData.height) + 1 22 is_balanced = leftData.is_balanced and rightData.is_balanced and abs(leftData.height - rightData.height) < 2 23 return ReturnData(is_balanced, height)