我今天进行了一次采访,问题是:
给出这个二叉树,编写一个仅在O(log n)时间即可到达任何给定索引的函数。
注意:此二叉树中的数字是索引NOT值。考虑值是空的。
该函数接受2个参数:我们想要的根和索引。
def reach_To_Index(root, index)
那棵他给我的树正好
1
/ \
2 3
/ \ / \
4 5 6 7
/ \
8 9
我的回答是:如果它是二叉搜索树,我可以这样做,但是他的回答是it is not a Binary Search Tree
,但是您可以使用模数来得出答案!
我的问题可能吗?如果可以,请问有人可以写这个功能!!
答案 0 :(得分:1)
def reach_to_index(node, index):
if index == 1:
return node
power = 2**(int(math.floor(math.log(index, 2))) - 1)
new_index = power + index % power
if index < 3 * power:
return reach_to_index(node.left, new_index)
return reach_to_index(node.right, new_index)
使用索引的二进制表示形式:
def reach_to_index(node, index):
for bit in bin(index)[3:]:
node = node.left if bit == '0' else node.right
return node