给你一个整数数组
nums,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。示例 1:
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
概念:
1. 二叉搜索树 BST
满足规则:
- 左子树所有节点值 < 根节点值
- 右子树所有节点值 > 根节点值
- 左右子树也必须满足同上规则
有序数组中序遍历,出来就是升序序列。
2. 平衡二叉树 AVL
满足规则:任意一个节点,左右子树的高度差绝对值 ≤ 1 这个高度差叫做平衡因子。
二、平衡二叉搜索树 = 两者合体
同时满足两个条件:
- 是二叉搜索树(大小有序)
- 是平衡二叉树(左右高度差不超 1)
三、核心思路
- 对比左子树 和右子树
- 对称规则:
- 左节点值 = 右节点值
- 左孩子左分支 ↔ 右孩子右分支
- 左孩子右分支 ↔ 右孩子左分支
- 终止条件:双双为空对称,单一为空不对称
python
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
def build(l, r):
if l > r:
return None
mid = (l + r) // 2
root = TreeNode(nums[mid])
root.left = build(l, mid-1)
root.right = build(mid+1, r)
return root
return build(0, len(nums)-1)
