问答题 编写程序段,利用中序全线索树求其中任意结点p^的前序后继结点,结果仍用p指出。要求先描述结构和算法思路。设线索树不带头结点,其中序序列第一结点的左标志和最后结点的右标志皆为0(非线索),对应指针皆为空。【北京工业大学2000七(10分)】【哈尔滨工业大学2004五、2(8分)】【上海交通大学2003三(15分)】
【正确答案】正确答案:求中序全线索树任意结点P的前序后继的规则如下:若P有左子女,则左子女就是其前序后继;若P无左子女而有右子女,则P的右子女就是P的前序后继;若P无左右子女,这时沿P的右线索往上,直到P的右标志为0(非线索),这时若P的右子女为空,则表示这是中序遍历最后一个结点,故指定结点无前序后继,否则,该结点就是指定结点的前序后继。程序段如下:if(p一>Itag==0&&p一>Ich~id!=null)return(p一>ichild); //p左子女是p的前序后继 else if(p一>rtag==0)&&p一>rch~id!=null)return(p一>rchild); //p右子女是其前序后继 else//p无左右子女。应沿右线索向上(找其前序后继),直到某结点右标记为0 {while(p一>rtag==1)p=p一>rchild; //沿右链向上 if(p一>rchild)return(p一>rchild); //指定结点的前序后继 else return(null); }
【答案解析】