【正确答案】正确答案:由孩子一兄弟链表表示的树,求深度的算法的基本设计思想:采用递归算法,若树为空,深度为0;若第一子女为空,深度为1和兄弟子树深度的大者,否则,深度为第一子女树深度加1和兄弟子树深度的大者。其非递归算法使用队列,逐层遍历树,取得树的深度。算法的代码; int Height(CSTree bt){ //递归求以孩子一兄弟链表表示的树的深度 int hc,hs; if(bt==NULL) return 0; else if(!bt一>fimstchild) return 1+height(bt一>nextSibling); //子女空,查兄弟的深度 { //结点既有第一子女又有兄弟,深度取子女深度加1和兄弟子树深度的大者 hc=height(bt一>firstchild);//第一子女树深 hs=height(bt一>nextsibling); //兄弟树深 if(hc+1>hS) return hc+1; e1Se return hs; } }/Iheight int height(CSTree t){ //非递归遍历求以孩子一兄弟链表表示的树的深度 if(t==NULL) return 0; e1Se { int frOnt=1,rear=1; //front、rear是队头、队尾元素的指针 int 1ast=1,h=0; //last指向树中同层结点中最后一个结点,h是树的深度 Q[rear]=t, //Q是以树中结点为元素的队列 while(front<=1ast) { t=Q[front++]; //队头出列 while(t!=NULL) { //层次遍历 i f(t一>firstchild) Q[++rear]=t->firstchild; //第一子女入队 t=t一>nextsibling; //同层兄弟指针后移 } if(front>1ast) f //本层结束,深度加1(初始深度为0) h++; last=rear; /Ilast再移到指向当前层最右一个结点 } j//while(front<=last] }//else }//Height
【答案解析】