# 平衡二叉树例题_平衡二叉树专题

110. 平衡二叉树(简单)

3

/ \

9 20

/ \

15 7

1

/ \

2 2

/ \

3 3

/ \

4 4

if abs(高度(root.left) - 高度(root.right)) <= 1 and root.left 也是平衡二叉树 and root.right 也是平衡二叉树:

print('是平衡二叉树')

else:

print('不是平衡二叉树')

def dfs(node, depth):

if not node: return 0

l = dfs(node.left, depth + 1)

r = dfs(node.right, depth + 1)

return max(l, r) + 1

Python3 Code:

class Solution:

def isBalanced(self, root: TreeNode) -> bool:

def dfs(node, depth):

if not node: return 0

l = dfs(node.left, depth + 1)

r = dfs(node.right, depth + 1)

return max(l, r) + 1

if not root: return True

if abs(dfs(root.left, 0) - dfs(root.right, 0)) > 1: return False

return self.isBalanced(root.left) and self.isBalanced(root.right)

108. 将有序数组转换为二叉搜索树(简单)

108 和 109 基本是一样的，只不过数据结构不一样，109 变成了链表了而已。由于链表操作比数组需要考虑更多的因素，因此 109 是 中等难度。

0

/ \

-3 9

/ /

-10 5

Python3 Code:

class Solution:

def sortedArrayToBST(self, nums: List[int]) -> TreeNode:

if not nums: return None

mid = (len(nums) - 1) // 2

root = TreeNode(nums[mid])

root.left = self.sortedArrayToBST(nums[:mid])

root.right = self.sortedArrayToBST(nums[mid + 1:])

return root

109. 有序链表转换二叉搜索树(中等)

`给定一个单链表，其中的元素按升序排序，将其转换为高度平衡的二叉搜索树。

0

/ \

-3 9

/ /

-10 5

(数组的情况)

(链表的情况)

Python3 Code:

class Solution:

def sortedListToBST(self, head: ListNode) -> TreeNode:

while fast and fast.next:

fast = fast.next.next

pre = slow

slow = slow.next

if pre:

pre.next = None

node = TreeNode(slow.val)

if slow == fast:

return node

node.right = self.sortedListToBST(slow.next)

return node

1382. 将二叉搜索树变平衡(中等)

Python3 Code:

class Solution:

def inorder(self, node):

if not node: return []

return self.inorder(node.left) + [node.val] + self.inorder(node.right)

def balanceBST(self, root: TreeNode) -> TreeNode:

nums = self.inorder(root)

def dfs(start, end):

if start == end: return TreeNode(nums[start])

if start > end: return None

mid = (start + end) // 2

root = TreeNode(nums[mid])

root.left = dfs(start, mid - 1)

root.right = dfs(mid + 1, end)

return root

return dfs(0, len(nums) - 1)

01-02 1274
04-14 3万+
01-17 828
01-17 617
01-05 1962
04-22 470
06-09 47
11-22 224

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

weixin_39846191

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。