对于这样的树来说,做搜索遍历时,它是要判断它的标记指针的.对任意一个结点,它的前驱就是左指针指向的结点(p->lchild),只是如果它的左标记为1,那说明前驱就是它的左孩子,否则就是穿线后的指针指向.当然只有最左结点是没有前驱的.(要有也是NULL).
感觉你的程序只是在线索化一棵树,而我的意思是在一棵已经线索化了的树中找指定结点的前驱!
不过在网上已经找到了,但总感觉没那么简单!void InPre(BiTNode * p, BiTNode * pre)
/* 在中序线索二叉树中查找p的中序前驱, 并用pre指针返回结果 */
{ if(p->Ltag==1) pre= p->LChild; /*直接利用线索*/
else
{ /* 在p的左子树中查找“最右下端”结点 */
for(q= p->LChild;q->Rtag==0;q=q->RChild);
pre=q;
}
[此贴子已经被作者于2007-6-26 13:46:18编辑过]
如果是已经线索化好的,那前驱就是->lchild.每个没有才是那样先线索化,如果是只找一个的话,那就是像你上面说的一样.你还是先弄清楚什么是线索树吧.