二叉树的中序非递归算法
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)遍历结束。

浙公网安备 33010602011771号