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

C++用智能指针实现BST的BFS功能时队列push报错如何解决

问题诊断

你的理解完全正确。你声明的queue<TreeNode>的元素类型是TreeNode实体对象,而执行push操作时传入的是shared_ptr<TreeNode>智能指针类型,二者没有隐式转换规则,因此编译器抛出类型不匹配错误。

解决方案

只需要将队列的元素类型修改为shared_ptr<TreeNode>即可,修改后的BFS函数代码如下:

template<typename T>
void BST<T>::bfs(shared_ptr<TreeNode>& root) {
    if(root == nullptr) return;
    // 仅修改队列声明行,存储智能指针而非TreeNode实体
    queue<shared_ptr<TreeNode>> bfsqueue;
    bfsqueue.push(root); 
    while (!bfsqueue.empty())
    {
        shared_ptr<TreeNode> current = bfsqueue.front();
        bfsqueue.pop();
        cout<<current->data<<" ";
        if (current->left != nullptr)
        {
            bfsqueue.push(current->left);
        }
        if (current->right != nullptr)
        {
            bfsqueue.push(current->right);
        }    
    }
}

补充优化建议

  • 由于BFS遍历不会修改节点指针本身,可将函数参数改为const shared_ptr<TreeNode>& root,符合const正确性规范。
  • 尽量避免在头文件使用using namespace std;,防止命名空间污染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:00