-
题目要求:编写非递归算法实现二叉树的中序遍历。
-
遍历代码:
void InOrderTraverseNR(BiTree T) { SqStack stack; InitStack(&stack); Push(&stack,T); while(!StackEmpty(stack)) { BiTree p; while(GetTop(stack,&p)&&p) Push(&stack,p->lchild); Pop(&stack,&p); if(!StackEmpty(stack)) { Pop(&stack,&p); printf("%c",p->data); Push(&stack,p->rchild); } } }
-
完整程序
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef struct { BiTree data[MAXSIZE]; int top; }SqStack; void InitStack(SqStack *S) { S->top=-1; } int GetTop(SqStack S,BiTree *e) { if(S.top==-1) return 0; else *e=S.data[S.top]; return 1; } int Push(SqStack *S,BiTree e) { if(S->top==MAXSIZE-1) return 0; S->top++; S->data[S->top]=e; return 1; } void Pop(SqStack *S,BiTree *e) { if(S->top==-1) return; *e=S->data[S->top]; S->top--; } int StackEmpty(SqStack S) { if (S.top==-1) return 1; else return 0; } //前序递归建立一棵二叉树 void CreateBiTree(BiTree *T) { char ch; scanf("%c",&ch); if(ch=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BiTNode)); if(!*T) return; (*T)->data=ch; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } } //二叉树的非递归中序遍历 void InOrderTraverseNR(BiTree T) { SqStack stack; InitStack(&stack); Push(&stack,T); while(!StackEmpty(stack)) { BiTree p; while(GetTop(stack,&p)&&p) Push(&stack,p->lchild); Pop(&stack,&p); if(!StackEmpty(stack)) { Pop(&stack,&p); printf("%c",p->data); Push(&stack,p->rchild); } } } int main() { BiTree T; printf("按照前序序列构造一棵二叉树:"); CreateBiTree(&T);//ABD##E##CF##G## printf("中序非递归遍历结果:"); InOrderTraverseNR(T); //DBEAFCG }
编写非递归算法实现二叉树的中序遍历
最新推荐文章于 2023-06-27 10:46:10 发布