二叉树的先根遍历

1.递归算法:

  void PreOrder(BNode p)

  {

    if(p == NULL)

      return;

    visit(p);

    PreOrder(p->lchild);

    PreOrder(p->rchild);

  }

2.非递归算法:

  数据结构:

    typedef PBinTreeNode DataType;    //栈元素的类型是PBinTreeNode

    struct SeqStack

    {

      DataType s[MAXNUM];

      int t;

    };

    typedef struct SeqStack * PSeqStack;

  程序代码:

    void nPreOrder_btree(BinTree btree)

    {

      PSeqStack s;

      PBinTreeNode c;

      if(btree == NULL)

        return;

      s = createEmptyStack_seq();

      push_seq(s,btree);

      while(!isEmptyStack_seq(s))

      {

        c = top_seq(s);

        pop_seq(s);           //取栈顶,出栈

        if(c != NULL)

        {

          visit(c);

          push_seq(s,c->rlink);    //右子女进栈

          push_seq(s,c->llink);    //左子女进栈

        }

      }

    }

posted @ 2012-09-10 20:24  毛毛hhmm  阅读(350)  评论(0编辑  收藏  举报