Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created January 21, 2018 20:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/dd9c01e828d214e7b97d9a8e0a4699a4 to your computer and use it in GitHub Desktop.
Save jianminchen/dd9c01e828d214e7b97d9a8e0a4699a4 to your computer and use it in GitHub Desktop.
draw H tree - code review - mock interview
# center = (x,y)
# first line will be; left_point (x - length/2, y) ------------- (x + length/2, y) right_point
#
# * *
# *****
# * *
# point (a,b) ==> (a, b - length/2) ..... (a, b + length/2)
# drawHTree(length, x, y, depth):
# left_point, right_point
# drawline(left_point, right_point)
# upper_left, lower_left
# drawline(upper_left, lower_left)
# upper_right, lower_right
# drawline(upper_right, lower_right)
#
# depth -=1
# if depth >=0:
# for center in (upper_left, lower_left, upper_right, lower_right )
# drawHTree(length/sqrt(2), *center, depth):
# space complexity O(1)
# time complexity
# 0th: 3
# 1th: 4*3
# 2th: 4*4*3
# ... (pow(4,0) + ... + pow(4, depth))*3
# O(power(4,depth))
def drawLine(point1, point2):
# point = (x,y)
print(point1,"----",point2)
def drawHTree(length, center, depth):
if depth == 0:
return
half = length/ 2
left_point = (center[0] - half, center[1])
right_point = (center[0] + half, center[1])
upper_left = (left_point[0], left_point[1] - half)
lower_left = (left_point[0], left_point[1] + half)
upper_right = (right_point[0], right_point[1] - half)
lower_right = (right_point[0], right_point[1] + half)
drawLine(left_point, right_point)
drawLine(upper_left, lower_left)
drawLine(upper_right, lower_right)
depth -= 1
length /= pow(2, 0.5)
for center in [upper_left, lower_left, upper_right, lower_right]:
drawHTree(length, center, depth)
drawHTree(10, (0,0), 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment