数据结构实验三:二叉树的遍历
源代码:
#include<stdio.h> #include<stdlib.h> #define null 0 #define overflow -2 #define ok 1 #define error 0 typedef struct bitree { int data; struct bitree *lchild,*rchild; }bitree; int visit(char *data) { printf("%c",data); return ok; } int zhengze(bitree **t) { int l,r; if(*t) { l=(int)(**t).lchild; r=(int)(**t).rchild; if((l==0&&r==0)||(l!=0&&r!=0)); else { printf("这个二叉树不是正则二叉树."); return 0; } l=zhengze(&(**t).lchild); if(l==0)return 0; r=zhengze(&(**t).rchild); if(r==0)return 0; return ok; } } int preordertraverse(bitree **t) { if(*t) { visit((**t).data); preordertraverse(&(**t).lchild); preordertraverse(&(**t).rchild); } return ok; } int inordertraverse(bitree **t) { if(*t) { inordertraverse(&(**t).lchild); visit((**t).data); inordertraverse(&(**t).rchild); } return ok; } int postordertraverse(bitree **t) { if(*t) { postordertraverse(&(**t).lchild); postordertraverse(&(**t).rchild); visit((**t).data); } return ok; } int createbitree(bitree **t) { char ch; scanf("%c",&ch); if(ch=='#') *t=null; else { if(!(*t=(bitree*)malloc(sizeof(bitree))))exit(overflow); (**t).data=ch; createbitree(&(**t).lchild); createbitree(&(**t).rchild); } return ok; } void main() { bitree *tree; printf("请输入二叉树的先序遍历序列:(#表示空)\n"); createbitree(&tree); printf("先序遍历:"); preordertraverse(&tree); printf("\n中序遍历:"); inordertraverse(&tree); printf("\n后序遍历:"); postordertraverse(&tree); printf("\n"); if(zhengze(&tree)) printf("这个二叉树是正则二叉树"); getchar(); getchar(); }
将如图所示的二叉树输入程序中: