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

BST代码无输出且触发段错误,请求排查错误原因

二叉搜索树代码段错误/无输出问题排查

你的代码在在线编译器出现段错误、VS Code无输出无报错的核心原因是**insert函数的递归调用参数错误**,导致无限递归触发栈溢出。

问题点分析

在insert方法中,递归插入左/右子树时,你传递的是当前节点newNode而非对应的子节点指针:

// 错误写法:递归传了当前节点newNode,导致无限递归
newNode -> left = insert(newNode, data);
newNode -> right = insert(newNode, data);

每次递归都会重复处理同一个节点,永远无法触达空节点的终止条件,最终栈内存耗尽引发段错误;VS Code环境下进程因栈溢出直接终止,所以没有任何输出。

修正后的代码

把递归调用的参数改成对应子节点即可:

#include <iostream>
using namespace std;

class node 
{
 public:
  int data;
  node *left, *right;

  node(int data){
    this->data = data;
    this->left = nullptr;
    this->right = nullptr;
  }
};

class BST{
 public:
 node* addNode(int data){
    return new node(data);
}

void Inorder(node* root){
    if(root == nullptr)
        return;
        
    Inorder(root->left);
    cout << root->data << "\t";
    Inorder(root->right);
}

node* insert(node* currNode, int data){
    if(currNode == nullptr)
        return addNode(data);
        
    if(data < currNode->data)
        // 递归传递左子节点
        currNode->left = insert(currNode->left, data);
    else if(data > currNode->data)
        // 递归传递右子节点
        currNode->right = insert(currNode->right, data);
    
    return currNode;
}

};

int main(){
node *root = nullptr;
BST objbst;
root = objbst.insert(root, 8);
root = objbst.insert(root, 3);
root = objbst.insert(root, 1);
root = objbst.insert(root, 6);
root = objbst.insert(root, 7);
root = objbst.insert(root, 10);
root = objbst.insert(root, 14);
root = objbst.insert(root, 4);

cout << "Inorder traversal: ";
objbst.Inorder(root);
cout << endl; // 加上换行让输出更整洁
}

额外优化建议

  • 用nullptr替代NULL,这是C++11及以后更规范的空指针写法
  • 去掉不必要的<type_traits>头文件,你的代码未用到该头文件内容
  • 主函数末尾添加换行输出,让结果格式更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:14