【正确答案】正确答案:在中序线索树中,非递归查找数据域为A的结点(设该结点存在,其指针为尸)并将数据域为x的Q结点插入左子树中。若P无左子女,则Q成为尸的左子女,原P的左线索成为Q的左线索,Q的右线索为P;若P有左子树,设P左子树中最右结点的右线索是结点Q,结点Q的右线索是P。 while(p) //初值p=中序线索二叉树根结点指针 {while(P一>LT==0&&p一>data!=A)p=p一>LL;//沿左子树向下 if(p一>data==A)break; //找到数据域为A的结点,退出循环 wh~le(p一>RT==1)P=p一>RL; //还没找到数据域为A的结点沿右线索找后继 P=P一>RL;) //沿右子树向下 if(P一>LT:=1) //p没有左子树,Q结点插入作p的左子女 {Q一>LL=P一>LL; Q一>LT=1;} //将P的左线索作为Q的左线索 else //P有左子树,应修改P的左子树最右结点的线索 fQ一>LL=P一>LL; Q一>LT=0; s=Q一>LL; //Q成为p的左子女,s指向原P的左子女 while(s一>RT==0)s=8一>RL; //查找P的左子树最右边的结点 s一>RL:Q; //原P左子树上最右结点的右线索是新插入结点Q } p->LT=0;P一>LL=Q; //修改p的标记和指针 Q一>RT=1;Q一>RL=p; //将Q链为p的左子女,其中序后继是p
【答案解析】