数据结构三种先序遍历非递归算法。 数据结构三种先序遍历非递归算法。

源代码在线查看: suanfa.txt

软件大小: 2 K
上传用户: awake2
关键词: 数据结构 递归 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				1.先序遍历非递归算法
				#define maxsize 100
				typedef struct
				{
				Bitree Elem[maxsize];
				int top;
				}SqStack;
				
				void PreOrderUnrec(Bitree t)
				{
				SqStack s;
				StackInit(s);
				p=t;
				
				while (p!=null || !StackEmpty(s))
				{
				while (p!=null) //遍历左子树
				{
				visite(p->data);
				push(s,p);
				p=p->lchild; 
				}//endwhile
				
				if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历
				{
				p=pop(s);
				p=p->rchild; 
				}//endif
				
				}//endwhile 
				
				}//PreOrderUnrec
				
				2.中序遍历非递归算法
				#define maxsize 100
				typedef struct
				{
				Bitree Elem[maxsize];
				int top;
				}SqStack;
				
				void InOrderUnrec(Bitree t)
				{
				SqStack s;
				StackInit(s);
				p=t;
				while (p!=null || !StackEmpty(s))
				{
				while (p!=null) //遍历左子树
				{
				push(s,p);
				p=p->lchild;
				}//endwhile
				
				if (!StackEmpty(s))
				{
				p=pop(s);
				visite(p->data); //访问根结点
				p=p->rchild; //通过下一次循环实现右子树遍历
				}//endif 
				
				}//endwhile
				
				}//InOrderUnrec
				
				
				3.后序遍历非递归算法
				#define maxsize 100
				typedef enum{L,R} tagtype;
				typedef struct 
				{
				Bitree ptr;
				tagtype tag;
				}stacknode;
				
				typedef struct
				{
				stacknode Elem[maxsize];
				int top;
				}SqStack;
				
				void PostOrderUnrec(Bitree t)
				{
				SqStack s;
				stacknode x;
				StackInit(s);
				p=t;
				
				do 
				{
				while (p!=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->rchild; 
				} 
				}while (!StackEmpty(s));
				}//PostOrderUnrec 
				
							

相关资源