问答题 设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。【北方交通大学1998七(20分)】
【正确答案】正确答案:中序遍历二叉排序树可以得到结点的升序序列,若按“右子树一根结点一左子树”进行遍历,则可以得到递减的结点序列。递归算法非常简单,如下所示: void DecPrint(BSTree t) //递减序输出二叉排序树t中所有左子树为空、右子树非空的结点数据域的值 {if(t) {DecPrint(t一>rchild); if(!t一>ichiid&&t一>rchild)cout<data; DecPrint(t一>Ichild); }//if)//DecPrint 非递归算法的核心语句段如下: while(t || top>0) //t是二叉排序树的根,top是栈顶指针,初值为0 {while(t){s[++top]=t;t=t一>rchild;} //沿右分支向下 if(top>0) {t=S[top一一]; //s是二叉排序树结点指针的栈,容量足够大 if(!t一>ichiid&&t一>rchiid)cout<data<ichild; //去左分支 }//if }//while
【答案解析】