class SegmentTree:
def __init__(self):
self.arr = [0] * 100
def insert(self, pos, left, right, value):
self.arr[pos] += 1
mid = int((left + right) / 2)# python中需要通过int()来取整,错写为mid = (left + right) / 2
if left == right:
return
if value > mid:
self.insert(2 * pos + 2, mid + 1, right, value)# 未理解线段树,错写为self.insert(2 * pos + 2, mid, right, value)
else:
self.insert(2 * pos + 1, left, mid, value)
def search(self, pos, left, right, value):
if left == right:
if self.arr[pos] == 1:#未理解线段树left,right对应区间,不和数组下标发生关系,所以写错为if self.arr[left] == 1
return True
else:
return False
mid = int((left + right) / 2)
if value > mid:
return self.search(2 * pos + 2, mid + 1, right, value)
else:
return self.search(2 * pos + 1, left, mid, value)
def printSegmentTree(self):
print(self.arr)
def main():
st = SegmentTree()
st.insert(0, 0, 5, 1)
st.insert(0, 0, 5, 2)
st.insert(0, 0, 5, 3)
print(st.search(0, 0, 5, 4))
st.printSegmentTree()
main()
线段树混淆点总结
最新推荐文章于 2024-06-03 13:31:43 发布