二叉树的中序非递归算法

View Code
1 typedef struct Node{
2     DataType data;
3     struct Node *lchild,*rchild;
4 }BinNode;
5 typedef BinNode* BinTree;
 1 void MidOrder(BinTree BT){
 2     stack s;
 3     BinTree* p=BT;
 4     while(p!=NULL||!isEmpty(s)){
 5         if(NULL!=p){
 6             push(s,p);//进栈
 7             p=p->lchild;//p指向其左孩子
 8         }else{
 9             p=top(s);
10             printf("%c",p->data);
11             p=p->rchild;
12             pop(s);
13         }
14     }
15 }

基本思想:

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

(2)将p压入栈s中,并将p执行其左孩子。

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

(4)将P指向从栈s中取出的栈顶元素,并访问,然后将p指向其右孩子,弹出栈

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

(6)遍历结束。

posted on 2012-05-22 17:08  为梦飞翔  阅读(109)  评论(0)    收藏  举报

导航