BTNode*&p=find(data);if(p)returnfalse;
p=newBTNode(data,NULL,NULL,current);returntrue;
}
boolremove(constT&data)
{
returnremove(find(data));
}
private:
boolremove(BTNode*&p)
{
if(!p)returnfalse;BTNode*t=p;
if(!p->left||!p->right)
{
if(!p->left)p=p->right;elsep=p->left;
if(p)p->parent=current;
deletet;returntrue;
}
t=p->right;while(t->left)t=t->left;p->data=t->data;current=t->parent;
returnremove(current->left==t?current->left:current->right);
}
};
以上代码有点费解,有必要说明一下——非线性链式结构操作的实现都是很让人费神。insert和remove都是以find为基础的,因此必须让find能最大限度的被这两个操作利用。
|