在BST(二叉搜索树)中查找介于给定范围之内的值
程序员文章站
2022-05-18 17:15:02
...
一、题目要求
编写一个递归函数printRange(),传入一个BST、一个较小的值和一个较大的值,按照顺序打印出介于两个值之间的所有结点。函数printRange()应尽可能少地访问BST的结点。(C++实现)
二、题解
代码如下:
void PrintRange(BinarySearchTree* bst,int minData,int maxData) {
//中序 保证按大小顺序打印范围内的数
while (bst->root) {
BinaryTreeNode *pointer = bst->root;
//向左子树查找,直到某棵左子树的根的值不大于给定的最小值
if (pointer->value>minData){
bst->root=pointer->lChild;
PrintRange(bst,minData,maxData);
}
//如果值在范围内则打印输出
if (pointer->value > minData && pointer->value < maxData)
cout << pointer->value << " ";
//向右子树查找,直到某棵右子树的根的值不小于给定的最大值
if (pointer->value<maxData){
bst->root=pointer->rChild;
PrintRange(bst,minData,maxData);
}
}
}