第108题:将有序数组转换为二叉搜索树
描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
解题思路:递归法
我们要构建一颗二叉树,因为题中给出的数组为有序数组,想到使用二叉树的中序遍历进行构建。
首先确定构建平衡二叉树的条件:左右子树都是平衡的。想到先构建根节点,再分别构建左右平衡的子树。
Python代码:
1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution(object): 9 def __init__(self): 10 nums = [] 11 12 def sortedArrayToBST(self, nums): 13 """ 14 :type nums: List[int] 15 :rtype: TreeNode 16 """ 17 self.nums = nums 18 return self.helper(0, len(nums) - 1) 19 20 def helper(self, left, right): 21 if left > right: 22 return None 23 mid = (left + right) // 2 24 25 root = TreeNode(self.nums[mid]) 26 root.left = self.helper(left, mid - 1) 27 root.right = self.helper(mid + 1, right) 28 return root
书痴者文必工,技痴者艺必良