我正在尝试用Python编写我学习的新数据结构,以下函数是线段树的一部分。
def query(root,interval,xy=ref_ll([False,False])):
print interval,root
if root.interval == interval or point(root.interval):
return root.quadrant.reflect(root.xy * xy) #Is always gonna be of the form [a,b,c,d]
a = q_list([0,0,0,0])
if interval[0] < root.r.interval[0]:
a = query(root.l,[interval[0],min(interval[1],root.l.interval[1])],root.xy * xy)
if interval[1] > root.l.interval[1]:
a = query(root.r,[max(interval[0],root.r.interval[0]), interval[1]],root.xy * xy)
return a
我希望这个程序能在O(h)时间内运行(h是树的高度),但它没有,有人可以指出我犯的错误吗?谢谢。
编辑:关于线段树的想法,请查看http://community.topcoder.com/i/education/lca/RMQ_004.gif 函数的终止条件是如果区间形式为(1,1),即它是一个点而不是范围。所有函数都已实现。 工作输入: http://pastebin.com/LuisyYCY 这是整个代码。http://pastebin.com/6kgtVWAq
ValueError: invalid literal for int() with 10
-- 你应该修改代码,使其能够使用与你示例树相同的数据运行。 - Ethan Furman