问答题
试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为x的结点,以及以它为根的子树,且释放相应存储空间。二叉树的三叉链表的描述为:TYPE bitreptr=^nodetp;nodetp=record data:char; lchild, rchild,parent:bitreptr END;VAR bt:bitreptr;{二叉树根结点的指针}【同济大学1998四(14分)】
【正确答案】正确答案:若二叉树已用二叉链表表示,当结点的子女存在时,将子女结点加上指向双亲的指针(根结点的双亲指针为空)。下面给出建立用三叉链表表示的二叉树的算法。二叉树按完全二叉树格式输入,对非完全二叉树,要补上“虚结点”。按完全二叉树双亲和子女存储下标间的关系,完成双亲和子女间指针的链接。‘≠}’是输入结束标志,‘$’是虚结点标志。核心语句段如下: cin>>ch ; while(ch!=‘#’) {p=null; if(ch!=‘$’){p=new(nodetp);p一>data=ch;P一>Ichild=p一>rchild=null;} Q[++rear]=P; //元素或虚结点,Q是队列,元素是二叉树结点指针;初值rear=0 if(p){if(rear==1){root=p; root一>parent=null;} //根结点 elsefQ[rear]一>parent=Q[rear/2]; //双亲结点和子女结点用指针链上 if(rear%2==0)Q[rear/2]一>ichild=Q[rear]; else Q[rear/2]->rchild=Q[rear];}} cin>>ch ; }//while
【答案解析】