一、任务:平衡二叉树
给你一个整数数组 nums
,其中元素已经按 升序 排列,请你将其转换为一棵
平衡 二叉搜索树。
二、思路:
1. 分类并递归
a. nums长度为1,返回TreeNode,val为第一个元素
b. nums长度为2,返回TreeNode,val为第二个元素,left递归
c. nums长度大于2,返回TreeNode,val为中心值,left递归,right递归
2. 注意每次返回的都是TreeNode,即二叉树,二叉树定义很简单,但是通过递归可以使left和right都为TreeNode
三、解答
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
if len(nums) == 1:
return TreeNode(val = nums[0])
elif len(nums) == 2:
return TreeNode(val = nums[1],left = self.sortedArrayToBST(nums[:1]))
else:
id0 = len(nums)//2
return TreeNode(val = nums[id0],left = self.sortedArrayToBST(nums[:id0]),right = self.sortedArrayToBST(nums[id0+1:]))
编程小白,所以结果比较差,见笑