Hi, need more help on the B-tree mission (https://app.dataquest.io/m/233/performance-boosts-of-using-a-b-tree-ii/5/implementing-the-range-query). I am having trouble understanding the logic behind the answer for the greater_than function. I added some comments to indicate what makes sense and what doesn’t for me. Hope someone has time to explain this. Thanks in advance!
def greater_than(self, node, term, upper_bound=None, inclusive=False):
# if the tree has no root, return an empty list
if not self.root:
return []
# if the root exists, loop through its keys
# if key < term, increment the index and go to the next key
# append matched values to the return list
index = 0
values = []
for key in node.keys:
if upper_bound is not None:
if inclusive and key == upper_bound:
values.append(key)
if key >= upper_bound:
break
if term > key:
index += 1
continue
if inclusive and key == term:
values.append(key)
if term < key:
values.append(key)
# if the node is an internal node, use the recursive function to
# continue find matching values on its children's nodes.
if not node.is_leaf():
values += self.greater_than(
node.children[index],
term,
upper_bound,
inclusive
)
index += 1
# not sure why checking whether the node is not a leaf here.
if not node.is_leaf():
values += self.greater_than(
node.children[index],
term,
upper_bound,
inclusive
)
return values