[转载]二叉树先序、中序、后序三种遍历的非递归算法
生活随笔
收集整理的這篇文章主要介紹了
[转载]二叉树先序、中序、后序三种遍历的非递归算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
本貼給出二叉樹先序、中序、后序三種遍歷的非遞歸算法,此三個算法可視為標準算法。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
轉載于:https://www.cnblogs.com/ppyyr/archive/2006/02/23/336508.html
總結
以上是生活随笔為你收集整理的[转载]二叉树先序、中序、后序三种遍历的非递归算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用SHA1或MD5 算法加密数据(示例:
- 下一篇: ASP.net 1.1 中相对路径转换为