问答题 编写程序段,利用中序全线索树求其中任意结点p的前序后继结点,结果仍用p指出。设线索树不带头结点,其中序序列第一个结点的左标志和最后一个结点的右标志皆为0(非线索),对应指针皆为空。【北京工业大学2000年】
【正确答案】正确答案:算法的基本设计思想:若p有左子女,则左子女就是其前序后继;若p无左子女而有右子女,则p的右子女就是p的前序后继;若P无左、右子女,这时沿p的右线索往上,直到P的右标志为0(非线索),这时若p的右子女为空,则表示这是中序遍历最后一个结点,故指定结点无前序后继,否则,该结点就是指定结点的前序后继。算法的代码: BiThrTree InSuec(BiThrTree T,BiThrTree P){ //利用中序全线索树求其中任意结点P的前序后继结点 if(p一>1tag==0&&P一>ichiid!=NULL) return p->ichiid; //p的左子女是P的前序后继 e1Se if(p一>rtag==0&&P一>rchiid!=NULL) return P一>rchiid; //p的右子女是其前序后继 e1Se { //p无左、右子女,应沿右线索向上(找其前序后继),直到某结点右标志为0 while(P一>rtag==1) p=p一>rchiid; if(p一>rchiid) retUrn P一>rchild; e上se return NULL; //指定结点的前序后继 } }//InSucc 注意题目“中序序列第一个结点的左标志和最后结点的右标志皆为0(非线索),对应指针皆为空”的说明。若无这一说明,只要结点的左标志为0,其左子女就是其前序后继。最后,当P无子女,沿右线索向上找其前序后继时,若最后结点的右标志为0,但对应指针为空,p也无前序后继。
【答案解析】