#define NULL 0 #include <stdio.h> #include <stdlib.h> typedef struct btnode //定义二叉树的结点类型 { char data; //二叉树中结点类型 struct btnode *lchild,*rchild; //左、右子树指针 }st; st *create(st *p) //创建二叉树, 并返回根结点指针 {char ch; if ((ch=getchar())=='#') p=NULL; //按先序方式输入二叉树中的结点序列, 并以'#'表示空结点 else { p=(st*) malloc(sizeof(st)); //创建根结点 p->data=ch; p->lchild=create(p->lchild); //创建左子树 p->rchild=create(p->rchild); //创建右子树 } return p; } void preorder(st *p) //对指针p指向的二叉树进行先根遍历 { if (p!=NULL){ printf("%2c",p->data); //访问根结点 preorder(p->lchild); //访问左子树 preorder(p->rchild); //访问右子树 } } void inorder(st *p) { if(p!=NULL) { inorder(p->lchild); //访问左子树 printf("%2c",p->data); //访问根结点 inorder(p->rchild); //访问右子树 } } void lastorder(st *p) { if(p!=NULL) { lastorder(p->lchild); //访问左子树 lastorder(p->rchild); //访问右子树 printf("%2c",p->data); //访问根结点 } } void main() { st *s,*bt; system("cls"); printf("请输入树结点字符串, 以 “#”结束:\n"); s = NULL; bt=create(s); //调用create()创建二叉树 printf("各种遍历的结果是: \n\n"); printf("先序:"); preorder(bt); //先序遍历二叉树 printf("\n\n"); printf("中序:"); inorder(bt); //中序遍历二叉树 printf("\n\n"); printf("后序:"); lastorder(bt); //后序遍历二叉树 printf("\n\n"); } |
![](https://img-blog.csdnimg.cn/d1ff810391514937a539873ba74632d6.png)