在二叉搜索树中查找小于给定值的所有值的算法

标签 algorithm binary-search-tree inorder

Having a Binary Search Tree of int create a linked list of all the integers less than a given integer x value.

我试过什么?

1)残酷的解决方案(低效)

inorder访问 BST,我在列表中为 Bst 中的每个整数插入一个节点, 然后我释放列表中从 x 开始的每个节点

2)效率更高但错误

我进行搜索,当我找到 x 时,我创建了一个列表,其中顺序访问了我找到 x 的节点的左儿子。

这显然是错误的,例如考虑以下 BST:

                         10
                        /  \
                       9    11
                      /       \
                     5         15
                    / \        / \
                   1   8      13  19
                             /  \
                            12  14

使用此解决方案,如果 x=15 我只考虑 {12,13,14},它只适用于 x=root。

问题是我该怎么做?

最佳答案

如果存储每个节点的父节点,可以实现更高效的解决方案,只要不关心结果列表中元素的顺序:

  1. 创建一个新列表来保存结果
  2. 找到感兴趣的节点
  3. 将在第 2 步中找到的节点的左子树中的所有节点添加到列表中,使用您喜欢的任何遍历(按顺序、前序等)
  4. 从第 2 步找到的节点的父节点开始,遍历所有父节点,依次添加每个节点,直到当前节点是根节点或其父节点左侧的节点
  5. 最后,再次使用任意遍历,将所有元素添加到第 4 步找到的节点的左侧

关于在二叉搜索树中查找小于给定值的所有值的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676790/

相关文章:

c++ - 如何合并、拆分和查询第 k 个排序列表?

linked-list - 二叉树遍历Inorder输出错误为什么?

algorithm - 循环列表总是可以通过适当的列表(以 nil 结尾)结合循环来模拟吗?

c++ - 该函数不会向我的 bst 树添加任何内容

algorithm - Map-Reduce实现中的一种特殊示例方法

c++ - C++ 中的转换错误

java - 中序遍历 BST 并将其添加到列表中

java - 二叉树的后序遍历

algorithm - 遗传算法的自适应突变/交叉率

javascript - 如何将数组 ABC 分配给另一个大小为 6 的数组