6.37③ 试直接利用栈的基本操作写出先序遍历的非递归 形式的算法

来源:互联网 发布:mac 触摸板 手势 编辑:程序博客网 时间:2024/06/18 03:47
6.37③ 试直接利用栈的基本操作写出先序遍历的非递归
形式的算法(提示:不必按3.3.2节介绍的从递归到非递归
的方法而直接写出非递归算法)。


要求实现下列函数:
void PreOrder(BiTree bt, void (*visit)(TElemType)); 
/* 使用栈,非递归先序遍历二叉树bt,    */
/* 对每个结点的元素域data调用函数visit */


二叉链表类型定义:
typedef struct BiTNode {
    TElemType data;
    BiTNode  *lchild,*rchild;
} BiTNode, *BiTree;


可用栈类型Stack的相关定义:
typedef BiTree SElemType;      // 栈的元素类型


Status InitStack(Stack &S); 
Status StackEmpty(Stack S); 
Status Push(Stack &S, SElemType e);
Status Pop(Stack &S, SElemType &e); 

Status GetTop(Stack S, SElemType &e); 


void PreOrder(BiTree bt, void (*visit)(TElemType)) 
/* 使用栈,非递归先序遍历二叉树bt,    */
/* 对每个结点的元素域data调用函数visit */
{
    //把结点压入栈中是为了方便访问结点的右结点
    BiTree p = bt;
    Stack s;    
    InitStack(s);
    while(p || !StackEmpty(s)){
        if(p){
            visit(p->data);
            Push(s, p);
            p = p->lchild;
        }else{
            Pop(s, p);
            p = p->rchild;
        }                 
    }
}

0 0
原创粉丝点击