使用int的二进制搜索树创建一个小于给定整数 x 值的所有整数的链接列表。
我尝试了什么?
1)残酷的解决方案(效率低下)
对BST进行inorder次访问,我在列表中为Bst中的每个整数插入一个节点, 然后我从x
开始释放列表中的每个节点2)效率更高但错误
我进行搜索,当我找到x时,我创建了一个列表,其中包含了我找到x的节点左子的有序访问。
这显然是错误的,例如考虑以下BST:
10
/ \
9 11
/ \
5 15
/ \ / \
1 8 13 19
/ \
12 14
使用此解决方案,如果x = 15,我只考虑{12,13,14},它只适用于x = root。
问题是我该怎么做?
答案 0 :(得分:1)
伪代码。 v 是当前顶点, ans 是答案列表, someTraversal 是遍历树并返回其元素列表的方法。
答案 1 :(得分:1)
如果存储每个节点的父节点,只要您不关心结果列表中元素的顺序,就可以实现更有效的解决方案:
答案 2 :(得分:0)
这是一个inorder遍历的修改版本,当节点的值为>时终止。 X
def nums_less_than(n, x, l=None):
if l == None:
l = []
if n.left:
nums_less_than(n.left, x, l)
if n.value < x:
l.append(n.value)
if n.right:
nums_less_than(n.right, x, l)
return l