?? 6_11.txt
字號:
void inorder(BiTree root);
{
int top=0; p=bt;
L1: if (p!=NULL) /* 遍歷左子樹 */
{
top=top+2;
if(top>m) return; /*棧滿溢出處理*/
s[top-1]=p; /* 本層參數進棧 */
s[top]=L2; /* 返回地址進棧 */
p=p->LChild; /* 給下層參數賦值 */
goto L1; /* 轉向開始 */
L2: Visit(p->data); /* 訪問根 */
top=top+2;
if(top>m) return; /*棧滿溢出處理*/;
s[top-1]=p; /* 遍歷右子樹 */
s[top]=L3;
p=p->RChild;
goto L1;
}
L3: if(top!=0)
{ addr=s[top];
p=s[top-1]; /* 取出返回地址 */
top=top-2; /* 退出本層參數 */
goto addr;
}
}
/*算法a*/
void inorder(BiTree root) /* 中序遍歷二叉樹,root為二叉樹的根結點 */
{
int top=0;
BiTree p;
BiTree s[Stack_Size];
int m;
m = Stack_Size-1;
p = root;
do
{
while(p!=NULL)
{
if (top>m) return;
top=top+1;
s[top]=p;
p=p->LChild;
}; /* 遍歷左子樹 */
if(top!=0)
{
p=s[top];
top=top-1;
Visit(p->data); /* 訪問根結點 */
p=p->RChild; /* 遍歷右子樹 */
}
}
while(p!=NULL || top!=0);
}
/*算法b*/
void InOrder(BiTree root) /* 中序遍歷二叉樹的非遞歸算法 */
{
SeqStack S;
BiTree p;
InitStack (&S);
p=root;
while(p!=NULL || !IsEmpty(&S))
{
if (p!=NULL) /* 根指針進棧,遍歷左子樹 */
{
Push(&S,p);
p=p->LChild;
}
else
{ /*根指針退棧,訪問根結點,遍歷右子樹*/
Pop(&S,&p);
Visit(p->data);
p=p->RChild;
}
}
}
/*算法c*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -