c语言将二叉树转换成数组,C语言 将二叉树转化为静态数组

62e50291a81fc54b507f33cb80033297.gif C语言 将二叉树转化为静态数组

(4页)

40e81a739264d9083b7adff30e1a58d2.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

9.9 积分

//C语言,将动态二叉树转化为静态数组#include#include//建立二叉树struct treenode *createBiTree(struct treenode **p,int x);//显示二叉树void traverse(struct treenode *p);//获取二叉树总的节点数并返回int nodeNum(struct treenode *p);//初始化数组的data数据,并使二叉树里面的arrayorder数据与数组下标一致void initArray(struct treenode *p);//将二叉树转化为数组void transform(struct treenode *p);struct treenode{ int data; struct treenode *left,*right; int arrayorder;//转化为数组之后该节点在数组里的元素下标};struct treenode *createBiTree(struct treenode **p,int x){ if(*p==NULL) { *p=(struct treenode *)malloc(sizeof(struct treenode)); if (*p==NULL) { printf("out of memory,press any key to quit...\n"); exit(0); } (*p)->data=x; (*p)->left=(*p)->right=NULL; (*p)->arrayorder=0; } else if(xdata) createBiTree(&(*p)->left,x); else createBiTree(&(*p)->right,x); return (*p);}static int length=0;int nodeNum(struct treenode *p){ if(p!=NULL) { length++; nodeNum(p->left); nodeNum(p->right); } return length;}void traverse(struct treenode *p){ if(p!=NULL) { printf("%d ",p->data); traverse(p->left); traverse(p->right); }}struct treeArray{ int data; int lchild,rchild;};static struct treeArray *a=NULL;//转化之后的数组static int num=0;void initArray(struct treenode *p){ if(p!=NULL) { a[num].data=p->data; p->arrayorder=num; num++; initArray(p->left); initArray(p->right); }}static int i=0;void transform(struct treenode *p){ if(p!=NULL) { if(p->left!=NULL) a[i].lchild=p->left->arrayorder; if(p->right!=NULL) a[i].rchild=p->right->arrayorder; i++; transform(p->left); transform(p->right); }}void main(void){ int x; struct treenode *root=NULL; //建立二叉树链表 printf("输入数据以\"ctrl+z\"结束:\n"); while(scanf("%d",&x)!=EOF) createBiTree(&root,x); printf("先序输出二叉树:"); traverse(root);//输出二叉链表 printf("\n"); //动态分配跟二叉树节点个数一样的静态数组 length=nodeNum(root); a=(struct treeArray *)malloc(sizeof(struct treeArray)*length); if (a==NULL) { printf("out of memory,press any key to quit...\n"); exit(0); } //用0初始化数组 for(int i=0;i

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值