问答题
编写递归算法,依据树的双亲表示法及其根结点创建树的孩子兄弟链表存储结构。要求写算法以前先写出这两种存储结构的类型说明。【清华大学1995六(20分)】
【正确答案】正确答案:树根结点是二叉树的根,遍历双亲表示法的整个静态链表找到根结点的子女,第一个子女是孩子兄弟表示法中的孩子,其他子女结点作兄弟。对双亲表示法中的任一结点,均递归建立其孩子兄弟链表子树。核心语句段如下: CSTree cst=new(CSNode)); //申请结点空间 cst一>data=pt.nodes[root].data; //根结点,初始调用要给出root的下标值 cst一>fir8tchild=null; cst一>nextsibling=null; firstchild=l ; //孩子标记 for(i=l;i<=pt.n; i++) //查找root的孩子 if(pt.nodes[i].parent==root) (child=ptreeTocstree(pt,i); //建立孩子的孩子兄弟链表 if(firstchild) i cst一>firstchild=chiid;firstchiid=0;sibling=cst一>firstchiid; } else//child不是root的第一个孩子,作兄弟处理 (sibling一>nextsibling=child; sibling=sibling一>nextsibling;}
【答案解析】