应用题 41.设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空、右子树非空的结点的数据域的值。
【正确答案】(1)递归算法
void DecPrint(BSTree t){
//递减序输出二叉排序树t中所有左子树为空、右子树非空的结点数据域的值
if(t){
DecPrint(t一>rchild);
if(!t一>lchild&&t一>rchild)printf(t一>data:4);
DecPrint(t一>lchild);
}
}
(2)非递归算法
void DecPrint(BSTree t){
//递减序输出二叉排序树t中所有左子树为空、右子树非空的结点的值
BSTree s[]; //s是二叉排序树结点指针的栈,容量足够大
int top=0;
while(t ∣∣ top>0){
while(t){s[++top]=t;t=t一>rchild;}//沿右分支向下
if(top>0){
t=S[top一一];
if(!t->lchild&&t一>rchild)printf(t一>data:4);
t=t一>lchild: //去左分支
}//if
}//while
}//算法结束
【答案解析】