二叉树的前序非递归遍历算法

1 typedef struct node{
2        DataType data;
3        struct node * lchild,*rchild;
4 }BinTNode;//节点类型
5 typedef BinTNode* BinTree;
void PreOrder(BinTree BT){
  stack s;
  BinTree p
=BT; while(p!=NULL||!isEmpty(s))
  
{
    if(p!=null){
      printf("%c",p->data);
      push(s,p);
      p=p->lchild;
    }else{
      p=top(s);
      p=p->rchild;
      pop(s);
    }   } }

基本思想:

(1)当树非空时,将指针p指向根节点,p为当前节点指针。

(2)先访问当前节点p,并将当前节点压入栈s中。

(3)另指针p指向其左孩子。

(4)重复执行步骤(2)(3)直到p为空为止。

(5)从栈s中取出栈顶元素,并将p指向其右孩子,然后释放栈顶元素。

(6)重复执行(2)(3)(4)(5),直到p为空并且栈s为空。

(7)遍历结束。

posted on 2012-05-22 16:45  为梦飞翔  阅读(152)  评论(0)    收藏  举报

导航