问答题 设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空、右子树非空的结点的数据域的值。
【正确答案】
【答案解析】(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 DecPfint(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
}//算法结束