Algorithm 在二叉搜索树中查找小于给定值的所有值的算法
使用整数二叉搜索树创建一个链表,其中包含小于给定整数x值的所有整数 我试过什么 1)残酷的解决方案(效率低下) 访问BST时,我在列表中为BST中的每个整数插入一个节点, 然后我从x开始释放列表中的每个节点 2)效率更高但错误 我进行搜索,当我找到x时,我创建一个列表,其中包含我找到x的节点的左子节点的顺序访问 这显然是错误的,例如考虑到以下BST:Algorithm 在二叉搜索树中查找小于给定值的所有值的算法,algorithm,binary-search-tree,inorder,Algorithm,Binary Search Tree,Inorder,使用整数二叉搜索树创建一个链表,其中包含小于给定整数x值的所有整数 我试过什么 1)残酷的解决方案(效率低下) 访问BST时,我在列表中为BST中的每个整数插入一个节点, 然后我从x开始释放列表中的每个节点 2)效率更高但错误 我进行搜索,当我找到x时,我创建一个列表,其中包含我找到x的节点的左子节点的顺序访问 这显然是错误的,例如考虑到以下BST: 10 / \
10
/ \
9 11
/ \
5 15
/ \ / \
1 8 13 19
/ \
12 14
这个解如果x=15,我只考虑{12,13,14},它只适用于x=根。
问题是我怎么做?伪代码。v是当前顶点,ans是答案列表,someTraversal是遍历树并返回其元素列表的方法然后v:=v.left,goto2
然后返回ans
如果存储每个节点的父节点,则可以实现更高效的解决方案,只要不关心结果列表中元素的顺序:
这里是一个修改版本的顺序遍历,当节点的值大于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
def nums_小于(n,x,l=None):
如果l==无:
l=[]
如果n.左:
nums_小于(n.左,x,l)
如果n.值
我不明白。为什么还要在1中的列表中插入大于x的数字?因此,当我遇到x时,我必须返回?为什么不修改顺序遍历,以便在当前节点=x时不遍历正确的子树?(从根目录中按顺序修改Ofc调用)当遇到x或大于x的数字时,是的。