欢迎来到天天文库
浏览记录
ID:61904194
大小:25.50 KB
页数:5页
时间:2021-03-26
《二叉树前序、中序、后序三种遍历的非递归算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Ò»¡£½Ì¿ÆÊé±ê×¼Ëã·¨1.ÏÈÐò±éÀú·ÇµÝ¹éËã·¨voidPreOrderUnrec(Bitree*t){Stacks;StackInit(s);Bitree*p=t;while(p!=NULL
2、
3、!StackEmpty(s)){while(p!=NULL)//±éÀú×ó×ÓÊ÷{visite(p->data);push(s,p);p=p->lchild;}if(!StackEmpty(s))//ͨ¹ýÏÂÒ»´ÎÑ»·ÖеÄÄÚǶwhileʵÏÖÓÒ×ÓÊ÷±éÀú{p=pop(s);
4、p=p->rchild;}//endif}//endwhile}2.ÖÐÐò±éÀú·ÇµÝ¹éËã·¨voidInOrderUnrec(Bitree*t){Stacks;StackInit(s);Bitree*p=t;while(p!=NULL
5、
6、!StackEmpty(s)){while(p!=NULL)//±éÀú×ó×ÓÊ÷{push(s,p);p=p->lchild;}if(!StackEmpty(s)){p=pop(s);visite(p->data);//·ÃÎʸù½áµãp=p->rchild;//ͨ¹
7、ýÏÂÒ»´ÎÑ»·ÊµÏÖÓÒ×ÓÊ÷±éÀú}//endif}//endwhile}3.ºóÐò±éÀú·ÇµÝ¹éËã·¨typedefenum{L,R}tagtype;typedefstruct{Bitreeptr;tagtypetag;}stacknode;typedefstruct{stacknodeElem[maxsize];inttop;}SqStack;voidPostOrderUnrec(Bitreet){SqStacks;stacknodex;StackInit(s);p=t;do{while(p!=
8、null)//±éÀú×ó×ÓÊ÷{x.ptr=p;x.tag=L;//±ê¼ÇΪ×ó×ÓÊ÷push(s,x);p=p->lchild;}while(!StackEmpty(s)&&s.Elem[s.top].tag==R){x=pop(s);p=x.ptr;visite(p->data);//tagΪR£¬±íʾÓÒ×ÓÊ÷·ÃÎÊÍê±Ï£¬¹Ê·ÃÎʸù½áµã}if(!StackEmpty(s)){s.Elem[s.top].tag=R;//±éÀúÓÒ×ÓÊ÷p=s.Elem[s.top].ptr->r
9、child;}}while(!StackEmpty(s));}//PostOrderUnrec¶þ¡£Ç°Ðò×î¼ò½àËã·¨voidPreOrderUnrec(Bitree*t){Bitree*p;Stacks;s.push(t);while(!s.IsEmpty()){s.pop(p);visit(p->data);if(p->rchild!=NULL)s.push(p->rchild);if(p->lchild!=NULL)s.push(p->lchild);}}Èý¡£ºóÐòËã·¨Ö®¶þvoidBT_Po
10、stOrderNoRec(pTreeTroot){stacks;pTreeTpre=NULL;while((NULL!=root)
11、
12、!s.empty()){if(NULL!=root){s.push(root);root=root->left;}else{root=s.top();if(root->right!=NULL&&pre!=root->right){root=root->right;}else{root=pre=s.top();visit(root);s.pop();root=NULL;}}}}
13、Ò»¸ö±È½ÏÈÝÒ×Àí½âµÄºóÐò±éÀú:voidPostOrder(Bitree*t){TreeNode*node=NULL,*last=NULL;Stacks;s,Init();s.push(t);while(!s.IsEmpty()){node=s.pop();if(last==node->left
14、
15、last==node->right)//×óÓÒ×ÓÊ÷ÒѾ·ÃÎÊÍêÁË£¬¸Ã·ÃÎʸù½ÚµãÁË{visit(node);last=node;}elseif(node->left
16、
17、node-
18、>right)//×óÓÒ×ÓÊ÷δ·ÃÎÊ£¬µ±Ç°½ÚµãÈëÕ»£¬×óÓÒ½ÚµãÈëÕ»{s.push(node);if(node->right)s.push(node->right);if(node->left)s.push(node->left);}else//µ±Ç°½ÚµãΪҶ
此文档下载收益归作者所有