题目描述
将有序列表转化为平衡二叉搜索树
思路
任务是构建树,第一想到就是递归创建。然后,平衡二叉搜索树,因为拿到的列表是有序的 (无序排一下序即可),列表的中间位置就是 root,左子树与右子树节点数近乎相同,故满足平衡性质。
代码
# 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]:
ans = self.helper(nums)
return ans
def helper(self, lis):
if len(lis) == 1:
return TreeNode(lis[0])
if len(lis) < 1:
return None
n = len(lis)
pos = n // 2
newNode = TreeNode(lis[pos]) # head
left = self.helper(lis[:pos])
right = self.helper(lis[pos + 1 :])
newNode.left = left
newNode.right = right
return newNode