问答题 以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度。【北方交通大学1999五(18分)】【南京航空航天大学2000九】
【正确答案】正确答案:由孩子兄弟链表表示的树高度的递归模型是:若树为空,高度为零;若第一子女为空,高度为1和兄弟子树高度的大者;否则,高度为第一子女树高度加1和兄弟子树高度的大者。其非递归算法使用队列,逐层遍历树,取得树的高度。递归算法的核心语句段如下: if(bt==null)return(0); else if(1bt->firstchild)return(max(1,height(bt->nextsibling))); else(hc=height(bt一>firstchild); //第一子女树高 hs=height(bt一>nextsibling); //兄弟树高 if(hc+l>hs)return(hc+1); else return(hs); }//else 非递归遍历求以孩子兄弟链表表示的树的深度的核心语句段如下: Q[rear]=t; //Q是以树中结点为元素的队列 while(front<=last) //初始front=rear=1 {t=Q[front++]; //队头出列 while(t|=null) //层次遍历 fif(t一>firstchild)Q[++rear]=t一>firstchild;//第一子女入队 t=t一>nextsibling; //同层兄弟指针后移 } if(front>last) //本层结束,深度加1(初始深度为0) {h++;last=rear;} //last再移到指向当前层最右一个结点 }
【答案解析】