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)

 

posted @ 2022-01-12 23:19  CaptainDragonfly  阅读(17)  评论(0编辑  收藏  举报