二叉线索树,寻找前驱与后继

来源:互联网 发布:淘宝上怎么修改差评 编辑:程序博客网 时间:2024/04/27 17:13


寻找前驱:

由二叉线索树的性质可得,当其Ltag=1时表示其lchild中保存的是前驱,否则保存的是link

所以对于结点P,当p->ltag=1,则p->lchild直接表示的是前驱,否则说明他有左子树,按照中序遍历的规则,只有当左子树遍历完才遍历它,因此其前驱应该是左子树的最右下端结点。


BiTNode * Inpre(BiTNode *p){    //在中序遍历中寻找前驱并用pre返回    if(p->ltag==1)   pre=p->lchild;    else     {       for(q=p->lchild;q->rtag==0;q=q->rchild)           pre=q;     }   return pre;}


寻找后继:


同理有线索树的性质可得,当其rtag=1时表示其rchild中保存的是后继,否则保存的是lingk

所以对于结点p,当p->rtag=1,则p->rchild直接表示的是后继,否则说明他有右子数,按照中序遍历的规则,只有当其右子树全部遍历完才遍历它,因此其后继应该是右子树的最左下端结点(中序先左后中再右)


BiTNode *Inpre(BiTNode *p){if(p->rtag==1)   pre=p->rchild;else{for(q=p->rchild;q->ltag==0;q=q->lchild)     pre=q;       }return pre;}


0 0