template <typename T>
class threadnode {
private:
threadnode* lchild;
threadnode* rchild;
int ltag;//如果是左子节点为0,前驱为1
int rtag;//如果是右子节点为0,后继为1
T data=NULL;
public:
bool operator==(threadnode p){
if(this->data==p.getdata()&&this->lchild==p.getleft()&&this->rchild==p.getright()){
return true;
}else{
return false;
}
}
virtual void setdata(T d){data=d;}
virtual T getdata(){return data;}
threadnode* getleft(){return lchild;}
threadnode* getright(){return rchild;}
void setleft(threadnode*l){lchild=l;}
void setright(threadnode*r){rchild=r;}
void setl(int l){ltag=l;}
void setr(int r){rtag=r;}
int getl(){return ltag;}
int getr(){return rtag;}
threadnode(T d=NULL,int lt=0,int rt=0,threadnode<T>* l=NULL,threadnode<T>* r=NULL):ltag(lt),rtag(rt),data(d){}
void InThread(threadnode *pre){
if(this!=nullptr){
lchild->InThread(pre);
if(lchild==nullptr){
lchild=pre;
ltag=1;
}
if(pre!=nullptr&&pre->getright()==nullptr){
(*pre).setright(this);
(*pre).setr(1);
}
pre=this;
rchild->InThread(pre);
}
}
void createinthread(){
int m;
threadnode pre=NULL;
if(this!=nullptr){
InThread(&pre);
pre.setright(nullptr);
pre.setr(1);
m=1;
}
}
};
测试代码:
threadnode<int> o1(1);
threadnode<int> o2(2);
threadnode<int> o3(3);
threadnode<int> o4(4);
o1.setleft(&o2);
o1.setright(&o3);
o2.setright(&o4);
threadnode<int> o5=NULL;
o1.createinthread();
if (o2.getl()==1) {
cout<< o2.getleft()->getdata();
}
测试结果:无法给rchild和rtag赋值,归结原因是pre是值传递,但是我传进去的是地址为什么还是没有改变?