首页 > 解决方案 > 创建一个段树,但它仍然为空。我找不到错误?

问题描述

基本上我正在尝试传递需要存储新块地址的指针

   void buildseg(class node *p,int a[],int l,int r)
{

    class node *temp;
    temp=createnode();
    int sum=0;
    for(int i=l;i<=r;i++)
    {
        sum=sum + a[i];
    }
    temp->val=sum;
    temp->leftrange=l;
    temp->rightrange=r;
    if(root==NULL)
    {
        root=temp;
    }
    if(l!=r)
    {
        int q=(l + r)/2;
        buildseg(temp->left,a,l,q);
        buildseg(temp->right,a,q+1,r);
    }
    else{
        temp->left=NULL;
        temp->right=NULL;
    }

    p=temp;

}

    class node{

public:
    int val;
    int leftrange;
    int rightrange;
    class node *left;
    class node *right;


};
class node *root=NULL;

class node *createnode()
{
    class node *p;
    p=(class node*)malloc(sizeof(class node));
    
    return p;


}

任何人都可以帮我解决错误所在。我们是否可以传递一个指针,我们必须在其中存储由 malloc 函数创建的块的地址。或者那里是错误的。

标签: c++

解决方案


您的函数原型void buildseg(class node *p,int a[],int l,int r)使函数不可能更改调用者的第一个参数。

当你这样称呼它时:

class node *x = NULL;
void buildseg(x,a, 4, 5);

该行p=temp;仅更改函数中的副本p,但不会更改x调用者。

您必须将第一个参数作为参考传递:

void buildseg(class node * &p,int a[],int l,int r)

推荐阅读