下面的二进制树代码给出了分段错误.有人能解释为什么吗

Binary tree code below is giving segmentation fault. Can anyone explain why?

本文关键字:错误 分段 能解释 为什么 二进制 代码      更新时间:2023-10-16

我正在尝试编码一个二进制树。首先我检查根是否为空,如果是,我将数据分配给根。但该代码存在分段错误。错误发生在cout语句中,这表明问题出在内存分配上。

我搞不清楚出了什么问题。有人能解释并建议我如何更正下面的代码吗?

#include<iostream>
using namespace std;

struct TreeNode { 
    int data; 
    struct TreeNode* left; 
    struct TreeNode* right; 
}; 
void insert(TreeNode *root, int data){
    TreeNode *newNode = new TreeNode;
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    if(root==NULL){
        root = newNode;
        return;
    }
}
int main(){
    TreeNode *root=NULL;
    insert(root,10);
    cout << root->data << endl;
}

您将"root"参数作为值传递,这意味着当您更改它时,您只更改它的本地副本。这意味着,当您将root设置为有效值时,它不会在main中更改root。由于根的值为NULL,因此会出现分段错误。

您可以通过返回插入的节点或使用引用来修复它。参考文献:

void insert(TreeNode*& root, int data){
    TreeNode *newNode = new TreeNode;
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    if(root==NULL){
        root = newNode;
        return;
    }
}