fdp47 fdp47
关注数: 0 粉丝数: 51 发帖数: 4,001 关注贴吧数: 5
二叉树操作程序 /*二叉树操作程序*/#include "stdio.h"#include "stdlib.h"#define M 50typedef struct node{ int data; struct node *lc; struct node *rc;}JD;main(){ JD *jlrcs(); void dxxbl(),dzxbl(),dhxbl(),jh(); JD *root,*p; char ch; for(;;) { printf("\n\n二叉树操作程序\n"); printf("j 建立二叉树\n"); printf("x 先序遍历\n"); printf("z 中序遍历\n"); printf("h 后序遍历\n"); printf("s 交换各结点的左右子树\n"); printf("q 退出\n"); printf("\n请选择 j/x/z/h/s/q : "); ch=getche(); printf("\n"); switch (ch) { case 'j':printf("\n请按先序序列输入二叉树各个");printf("结点字符,用#号表示空指针\n");root=jlrcs();break; case 'x':printf("\n按先序遍历结果是: \n");dxxbl(root);break; case 'z':printf("\n按中序遍历结果是: \n");dzxbl(root);break; case 'h':printf("\n按后序遍历结果是: \n");dhxbl(root);break; case 's':jh(root);break; case 'q':exit(0); default:printf("\n选择错误,请重新选择!\n"); } }}JD *jlrcs(){ /*建立二叉树*/ JD *t; char x; scanf("%c",&x); if (x=='#') t=NULL; else { t=(JD *)malloc(sizeof(JD)); t->data=x; t->lc=jlrcs(); t->rc=jlrcs(); } return(t);}void dxxbl(JD *r){ /*先根遍历*/ if (r!=NULL) { printf("%5c",r->data); dxxbl(r->lc); dxxbl(r->rc); }}void dzxbl(JD *r){ /*中根遍历*/ if (r!=NULL) { dzxbl(r->lc); printf("%5c",r->data); dzxbl(r->rc); }}void dhxbl(JD *r){ /*后根遍历*/ if (r!=NULL) { dhxbl(r->lc); dhxbl(r->rc); printf("%5c",r->data); }}void jh(JD *r){ /*交换结点的左右子树*/ int s2[M],i=0; JD *p,*t,*s1[M]; p=r; do { while (p!=NULL) { s1[i]=p; s2[i++]=0; p=p->lc; } while ((i>0) && (s2[i-1]==1)) { p=s1[--i]; t=p->lc; p->lc=p->rc; p->rc=t; } if (i>0) { s2[i-1]=1; p=s1[i-1]; p=p->rc; } }while (i>0);}
1 下一页