设二叉排序树以二叉链表形式存放,用类C语言设计非递归算法从大到小输出一棵根结点为T的二叉树所有不小于k的数据元素。
还是利用栈,类似于二叉树中序遍历的非递归算法,但是要先访问右孩子(根据二叉排序树的定义),因为要求是从大到小。
算法如下:
void OutputTree(BiTree T)
{
BiTree p;
InitStack(S);
p=T;
while(p||!StackEmpty(S))
{
if(p)
{
Push(S,p);
p=p->rchild;
}
else
{
Pop(S,p);
if(p->data>=k)
printf(p->data);
p=p->lchild;
}
}
}