实验13_full - 二叉树非递归遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十三二叉树非递归遍历

1. 创建一个包含数字元素的完全二叉树,使用switch函数,根据用户的输入,同时具有如下功能:

【1】初始化一个二叉树

提示:scanf("%d%d",&i,&x);//i是按满二叉树编号,节点应有的序号,x是节点的数据先建立一个新节点,再利用性质5,建立新节点与其双亲的左/右孩子的关系。

【2】前序非递归遍历,打印出各节点的数据

【3】中序非递归遍历,打印出各节点的数据

【4】后序非递归遍历,打印出各节点的数据

【5】结束程序运行

#include

#include

struct node

{

int data;

struct node *lc,*rc;

};

struct node *root;

int m=0;

main()

{

int cord;

struct node* creat();

void preorderz(struct node *t);

void inorder(struct node *t);

void postorder(struct node *t);

do

{

printf("\n 主菜单\n");

printf(" 1 建立二叉树\n");

printf(" 2 先序非递归遍历\n");

printf(" 3 中序非递归遍历\n");

printf(" 4 后序非递归遍历\n");

printf(" 5 结束程序运行\n");

printf("-----------------------------------\n");

printf("请输入您的选择(1, 2, 3, 4, 5)");

scanf("%d",&cord);

switch(cord)

{

case 1:

{

root=creat(); // 建立二叉树

printf("建立二叉树程序以执行完,\n");

printf("请返回主菜单,用遍历算法验证程序的正确性\n");

}break;

case 2:

{

preorderz(root);

}break;

case 3:

{

inorder(root);

}break;

case 4:

{

postorder(root);

}break;

case 5:

{

printf("二叉树程序执行完,再见!\n");

exit(0);

}

}

}while(cord<=6);

}

struct node* creat()

{

struct node *t,*q,*s[30];

int i,j,x;

printf("i,x=");

scanf("%d%d",&i,&x);//i是按满二叉树编号,节点应有的序号,x是节点的数据 while((i!=0)&&(x!=0))

{

q=(struct node*)malloc(sizeof(struct node));

q->data=x;

q->lc=NULL; q->rc=NULL;//建立新节点q

s[i]=q;

if(i==1)

t=q; //t代表树根节点

else

{

j=i/2; //i的双亲节点的编号

if((i%2)==0)

s[j]->lc=q;

else

s[j]->rc=q;

}

printf("i,x=");

scanf("%d%d",&i,&x);

}

return(t);

}

void preorderz(struct node* p)//前序非递归算法

{

struct node *q,*s[30]; //s辅助栈

int top,bools;

q=p;top=0; //栈顶指针

bools=1; //bools=1为真值继续循环;bools=0为假时栈空,结束循环 do

{

while(q!=NULL)

{

printf("%6d",q->data); //访问节点

top++;

s[top]=q;

q=q->lc;

}

if(top==0)

bools=0;

else

{

q=s[top];

top--;

q=q->rc;

}

}while(bools);

printf("\n");

}

void inorder(struct node* p)//中序非递归遍历{

struct node *s[30],*q;

int top,bools;

q=p;top=0;

bools=1;

do

{

while(q!=NULL)

{

top++;

s[top]=q;

q=q->lc;

}

if(top==0)

bools=0;

else

{

q=s[top];

top--;

printf("%6d",q->data); //访问节点

q=q->rc;

相关文档
最新文档