计数左偏红黑树上每个节点的子树节点

时间:2019-12-04 18:28:19

标签: c++ boost tree rotation multiway-tree

我正在尝试跟踪每个节点上的子树节点,以便在日志时间内进一步确定等级,不确定在插入涉及旋转时如何完成此操作。将不胜感激。 这是我到目前为止所拥有的:

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;
}  

0 个答案:

没有答案