首页 > 代码库 > 新增指针节点时注意

新增指针节点时注意

 

以下面指针版主席树部分代码为例

在新增一个指针节点时,

不能只 node *neww,这样可能新增节点的地址与其他的地址重复

比如build 函数里,如果node neww ,那么neww的地址就会与pre的地址重复

所以要node * neww=new node()

或者是 node * neww=(node * )malloc (sizeof(node))

#include<cstdio>
#include<algorithm>
#define N 100001
using namespace std;
int n,m,a[N],hash[N];
int tot,cnt;
struct node
{
    node * l,* r;
    int sum;
};
node * root[N]; 
inline node * build(node * pre,int l,int r,int w)
{
    node *neww=new node();
    //node * neww=(node *)malloc(sizeof(node));
    neww->sum=pre->sum+1;
    if(l==r) return neww;
    int mid=l+r>>1;
    if(w<=mid)
    {
        neww->r=pre->r;
        neww->l=build(pre->l,l,mid,w);
    }
    else
    {
        neww->l=pre->l;
        neww->r=build(pre->r,mid+1,r,w);
    }
    return neww;
}
node * null(int ll,int rr)
{
    node *neww=new node();
    //node * neww=(node *)malloc(sizeof(node));
    neww->l=neww->r=NULL;
    neww->sum=0;
    if(ll==rr) return neww;
    int mid=ll+rr>>1;
    neww->l=null(ll,mid);
    neww->r=null(mid+1,rr);
    return neww;
}

 

新增指针节点时注意