如何在O(log n)时间内遍历此二叉树?

时间:2019-02-16 00:52:27

标签: python python-3.x python-2.7

我今天进行了一次采访,问题是:

给出这个二叉树,编写一个仅在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,但是您可以使用模数来得出答案!

我的问题可能吗?如果可以,请问有人可以写这个功能!!

1 个答案:

答案 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