我正在尝试跟踪每个节点上的子树节点,以便在日志时间内进一步确定等级,不确定在插入涉及旋转时如何完成此操作。将不胜感激。 这是我到目前为止所拥有的:
TNODE<items,item> *RBTree<items,item>::inserthelper(items k,item v,TNODE<items,item> *p){
if (p == NULL){
p =new TNODE<items,item>(k,v,NULL,NULL,p,0);
root=p;
s+=1;
return p;
}
if (isRed(p->left)&&isRed(p->right)){
colorFlip(p);
}
if((mycomp(k,p->key)<0)&&(p->left==NULL)){
TNODE<items,item> *l=new TNODE<items,item>(k,v,NULL,NULL,p,1);//v,l,r,p
p->left=l;
s+=1;
}
else if((mycomp(k,p->key)>0)&&(p->right==NULL)){
TNODE<items,item> *r=new TNODE<items,item>(k,v,NULL,NULL,p,1);
p->right=r;
s+=1;
}
if((mycomp(k,p->key)<0)){
p->left= inserthelper(k,v,p->left);
}
else if((mycomp(k,p->key)>0)){
p->right= inserthelper(k,v,p->right);
}
if(isRed(p->right)){
p=rotateleft(p);
p->count=countsubtree(p);
}
if(isRed(p->left)&&isRed(p->left->left)){
p=rotateright(p);
p->count=countsubtree(p);
}
return p;
}