You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除C++中BST范围搜索结果的末尾逗号?

解决BST范围搜索输出末尾多余逗号的问题

你的BST范围搜索代码目前会输出15,20,24,,末尾多了一个不必要的逗号,下面给你两种实用的解决办法:

方法一:用标记控制逗号输出

递归过程中记录是否是第一个符合条件的元素,只有非第一个元素前才输出逗号,从根源避免末尾多出来的逗号。修改nodesInRange函数,增加一个引用类型的标记变量:

#include<bits/stdc++.h>
using namespace std;
class node{
   public:
      int data;
      node *left;
      node *right;
};
// 新增bool& first标记参数,控制逗号输出时机
void nodesInRange(node *root, int k1, int k2, bool& first){
   if ( NULL == root )
      return;
   if ( k1 < root->data )
      nodesInRange(root->left, k1, k2, first);
   if ( k1 <= root->data && k2 >= root->data ){
      if(!first){
          cout<<","; // 非第一个元素前加逗号
      } else {
          first = false; // 第一个元素输出后,标记置为false
      }
      cout<<root->data;
   }
   if ( k2 > root->data )
      nodesInRange(root->right, k1, k2, first);
}
node* insert(int data){
   node *temp = new node();
   temp->data = data;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
int main(){
   node *root = new node();
   int k1 = 12, k2 = 25;
   root = insert(20);
   root->left = insert(10);
   root->right = insert(24);
   root->left->left = insert(8);
   root->left->right = insert(15);
   root->right->right = insert(32);
   cout<<"The values of node within the range are\t";
   bool first = true; // 初始化标记为第一个元素
   nodesInRange(root, k1, k2, first);
   cout<<endl;
   return 0;
}

方法二:先收集元素再统一输出

先把所有符合范围的节点值存到容器中,之后再遍历输出,这种方式逻辑更清晰,也方便后续对结果做其他处理:

#include<bits/stdc++.h>
using namespace std;
class node{
   public:
      int data;
      node *left;
      node *right;
};
// 把符合条件的元素收集到vector中
void collectNodesInRange(node *root, int k1, int k2, vector<int>& res){
   if ( NULL == root )
      return;
   if ( k1 < root->data )
      collectNodesInRange(root->left, k1, k2, res);
   if ( k1 <= root->data && k2 >= root->data ){
      res.push_back(root->data);
   }
   if ( k2 > root->data )
      collectNodesInRange(root->right, k1, k2, res);
}
node* insert(int data){
   node *temp = new node();
   temp->data = data;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
int main(){
   node *root = new node();
   int k1 = 12, k2 = 25;
   root = insert(20);
   root->left = insert(10);
   root->right = insert(24);
   root->left->left = insert(8);
   root->left->right = insert(15);
   root->right->right = insert(32);
   cout<<"The values of node within the range are\t";
   vector<int> res;
   collectNodesInRange(root, k1, k2, res);
   // 遍历输出,处理逗号格式
   for(int i=0; i<res.size(); i++){
       if(i>0) cout<<",";
       cout<<res[i];
   }
   cout<<endl;
   return 0;
}

这两种方法都能输出15,20,24的正确格式,第二种方法更灵活,比如后续要对结果排序、统计数量都很容易扩展。

内容的提问来源于stack exchange,提问作者ace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:31:00