📅  最后修改于: 2023-12-03 15:12:38.443000             🧑  作者: Mango
本题的主要内容涉及数据结构和算法,需要对二叉搜索树(BST)有一定的了解。
给定一个BST和两个整数k1和k2,编写一个函数,返回所有在k1和k2之间(包括k1和k2)的BST节点的值。
输入包含三部分:
对于每个测试用例,将所有在k1和k2之间的BST节点值以递增顺序打印在一行中,并在每个测试用例后输出一个换行符。
输入:
2
5
4 3 2 5 6
2 5
7
10 5 50 1 40 100 200
5 45
输出:
2 3 4 5
5 10 40
我们可以使用中序遍历BST并将节点值存储在一个数组中。我们然后将值从数组中得到k1和k2之间的所有节点的子集,并对其进行排序。最后,我们打印排序后的数组。
以下是Python实现的代码示例:
def elements_in_range(root, k1, k2):
elements = []
def helper(root):
if not root: return
if root.val > k1:
helper(root.left)
if k1 <= root.val <= k2:
elements.append(root.val)
if root.val < k2:
helper(root.right)
helper(root)
return elements
# 测试代码
print(elements_in_range(root, k1, k2))
以下是C ++实现的代码示例:
void elements_in_range(Node *root, int k1, int k2)
{
if (!root) return;
if (k1 < root->data)
elements_in_range(root->left, k1, k2);
if (k1 <= root->data && k2 >= root->data)
cout << root->data << " ";
if (k2 > root->data)
elements_in_range(root->right, k1, k2);
}
// 测试代码
elements_in_range(root, k1, k2);
使用这种方法的时间复杂度为O(n),其中n是BST的节点数。由于我们存储了中序遍历的结果,空间复杂度为O(n)。