6. Create a balanced binary search tree
Hi, here's your problem today. This problem was recently asked by LinkedIn: Given a sorted list of numbers, change it into a balanced binary search tree. You can assume there will be no duplicate numbers in the list.
from collections import deque
class Node:
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def __str__(self):
# level-by-level pretty-printer
nodes = deque([self])
answer = ''
while len(nodes):
node = nodes.popleft()
if not node:
continue
answer += str(node.value)
nodes.append(node.left)
nodes.append(node.right)
return answer
def createBalancedBST(nums):
# Fill this in.
print createBalancedBST([1, 2, 3, 4, 5, 6, 7])
# 4261357
# 4
# / \
# 2 6
#/ \ / \
#1 3 5 7
The time complexity of this solution is O(n), since every element is iterated through.
The space complexity of this solution is O(n), since a new Node is created for every element.
def createBalancedBST(nums):
if not nums:
return None
mid = len(nums) // 2
left = createBalancedBST(nums[0:mid])
right = createBalancedBST(nums[mid+1:len(nums)])
return Node(mid, left, right)
// Iterative版本
def createBalancedBST(nums):
if not nums:
return None
mid = len(nums) // 2
root = node(mid)
nums.remove(mid)
for i in range(len(nums)):
insert(root, Node(nums[i]))
return root
def insert(root,node):
current = root
paernt = None
# While traversing, it stores the parent node of each current node and when the current node becomes empty or None,
while current:
parent = current
if node.val < current.val:
current = current.left
else:
current = current.right
if parent == None:
# there is no node in thr tree
parent = node
elif node.val < parent.val:
parent.left = node
else:
parent.right = node

Last updated
Was this helpful?