data); stack[top]=p;// 预留 p 指针在数组中 top++; p=p->lchild; } if (top>0){ top--; p=stack[top]; p=p->rchild;///* 左子树为空,进右子树*/ }}}} void NRInOrder(BTree bt){// 非递归中序遍历 BTree stack[MA" /> data); stack[top]=p;// 预留 p 指针在数组中 top++; p=p->lchild; } if (top>0){ top--; p=stack[top]; p=p->rchild;///* 左子树为空,进右子树*/ }}}} void NRInOrder(BTree bt){// 非递归中序遍历 BTree stack[MA" />

全文预览

数据结构课程设计二叉树的创建和遍历

上传者:hnxzy51 |  格式:doc  |  页数:23 |  大小:0KB

文档介绍
p!=NULL){ printf("%c",p->data); stack[top]=p;// 预留 p 指针在数组中 top++; p=p->lchild; } if (top>0){ top--; p=stack[top]; p=p->rchild;///* 左子树为空,进右子树*/ }}}} void NRInOrder(BTree bt){// 非递归中序遍历 BTree stack[MAX],p; 第 7页 int top; if (bt!=NULL){ top=0; p=bt; while(p!=NULL||top>0){ while(p!=NULL){ stack[top]=p; //预留 p 指针在数组中 top++; p=p->lchild; } if (top>0){ top--; p=stack[top]; printf("%c",p->data); p=p->rchild;/* 左子树为空,进右子树*/ }}}} void NRPostOrder(BTree bt){// 非递归后序遍历 stacknode s[MAX],x; 第 8页 BTree p=bt; int top; if(bt!=NULL){ top=0; p=bt; do{ while (p!=NULL){ // 遍历左子树 s[top].ptr = p; s[top].tag = 1; // 标记为左子树 top++; p=p->lchild; } while (top>0 && s[top-1].tag==2){ x= s[--top]; p= x.ptr; printf("%c",p->data); //tag 为R ,表示右子树访问完毕,故访问根结点} if (top>0){ s[top-1].tag =2; // 遍历右子树 p=s[top-1].ptr->rchild; }

收藏

分享

举报
下载此文档