typedef struct Node* node;
struct Node
{
int val;
int num;
node Next[2];
Node()
{
val = num = 0;
memset(Next,NULL,sizeof(Next));
}
};
void Insert(node root,int x,int flag)//flag的正负对应了加入和删除
{
node p = root;
for(int i=31 ; i>=0 ; i--)
{
int t = (x>>i)&1;
if(p->Next[t] == NULL)p->Next[t] = new struct Node();
p->num += flag;
p = p->Next[t];
}
p->num += flag;
p->val = x;
}
int Judge(node root,int x)//注意返回的是树中与x异或结果最大的值,不是异或后的结果。
{
node p = root;
for(int i=31 ; i>=0 ; i--)
{
int t = ((x>>i)&1)^1;
if(p->Next[t] == NULL || p->Next[t]->num == 0)t = (x>>i)&1;
if(p->Next[t] && p->Next[t]->num)p = p->Next[t];
else return -1;
}
return p->val;
}
void Del(node root){
for(int i=0 ; i<2 ; ++i){
if(root->Next[i])Del(root->Next[i]);
}
delete(root);
}
int main(){
node root = new struct Node();
}
转载于:https://www.cnblogs.com/vocaloid01/p/9514066.html