欢迎来到天天文库
浏览记录
ID:37915958
大小:34.50 KB
页数:4页
时间:2019-06-02
《C语言 将二叉树转化为静态数组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//C语言,将动态二叉树转化为静态数组#include#include//建立二叉树structtreenode*createBiTree(structtreenode**p,intx);//显示二叉树voidtraverse(structtreenode*p);//获取二叉树总的节点数并返回intnodeNum(structtreenode*p);//初始化数组的data数据,并使二叉树里面的arrayorder数据与数组下标一致voidinitArray(structtreenode*p);
2、//将二叉树转化为数组voidtransform(structtreenode*p);structtreenode{intdata;structtreenode*left,*right;intarrayorder;//转化为数组之后该节点在数组里的元素下标};structtreenode*createBiTree(structtreenode**p,intx){if(*p==NULL){*p=(structtreenode*)malloc(sizeof(structtreenode));if(*p==NULL){printf("ou
3、tofmemory,pressanykeytoquit...");exit(0);}(*p)->data=x;(*p)->left=(*p)->right=NULL;(*p)->arrayorder=0;}elseif(x<(*p)->data)createBiTree(&(*p)->left,x);elsecreateBiTree(&(*p)->right,x);return(*p);}staticintlength=0;intnodeNum(structtreenode*p){if(p!=NULL){length++;nod
4、eNum(p->left);nodeNum(p->right);}returnlength;}voidtraverse(structtreenode*p){if(p!=NULL){printf("%d",p->data);traverse(p->left);traverse(p->right);}}structtreeArray{intdata;intlchild,rchild;};staticstructtreeArray*a=NULL;//转化之后的数组staticintnum=0;voidinitArray(structtre
5、enode*p){if(p!=NULL){a[num].data=p->data;p->arrayorder=num;num++;initArray(p->left);initArray(p->right);}}staticinti=0;voidtransform(structtreenode*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++;tr
6、ansform(p->left);transform(p->right);}}voidmain(void){intx;structtreenode*root=NULL;//建立二叉树链表printf("输入数据以"ctrl+z"结束:");while(scanf("%d",&x)!=EOF)createBiTree(&root,x);printf("先序输出二叉树:");traverse(root);//输出二叉链表printf("");//动态分配跟二叉树节点个数一样的静态数组length=nodeNum(root);
7、a=(structtreeArray*)malloc(sizeof(structtreeArray)*length);if(a==NULL){printf("outofmemory,pressanykeytoquit...");exit(0);}//用0初始化数组for(inti=0;i8、为:");printf("下标datalchildrchild");for(intj=0;j
8、为:");printf("下标datalchildrchild");for(intj=0;j
此文档下载收益归作者所有