Question
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Hide Tags Tree Depth-first Search
Analysis
use binary search
Solution
v1.
The stop condition of depth-search tree is when subarray has only one or two elements.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param {integer[]} nums
# @return {TreeNode}
def sortedArrayToBST(self, nums):
if len(nums)==0:
return None
return self.helper(nums, 0, len(nums)-1)
def helper(self,nums,left,right):
if right==left:
node1 = TreeNode(nums[right])
return node1
if right-left==1:
node1 = TreeNode(nums[right])
node2 = TreeNode(nums[left])
node2.right = node1
return node2
mid = (left+right)/2
subroot = TreeNode(nums[mid])
subroot.left = self.helper(nums,left,mid-1)
subroot.right = self.helper(nums,mid+1,right)
return subroot
v2
The stop condition is changed for creating None.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param {integer[]} nums
# @return {TreeNode}
def sortedArrayToBST(self, nums):
if len(nums)==0:
return None
return self.helper(nums, 0, len(nums)-1)
def helper(self,nums,left,right):
if left>right:
return None
mid = (left+right)/2
subroot = TreeNode(nums[mid])
subroot.left = self.helper(nums,left,mid-1)
subroot.right = self.helper(nums,mid+1,right)
return subroot