最近在学习C语言的基础知识。
正好,今天为一个同学讲二叉树的创建与排序。将最近复习的知识又重新梳理了一下,顺便记录下二叉树实现的具体代码。 1、二叉树节点的存储结构- typedef struct BiTNode
- {
- ElemType data;
- struct BiTNode*lchild,*rchild;//左右孩子指针
- } BiTNode,*BiTree;
2 利用前驱遍历的方式,创建二叉树,
3 利用递归的方式,前序、中序、后序遍历二叉树
- #include <stdlib.h>
- #include <stdio.h>
- typedef char ElemType;//每个元素的数据类型为ElemType。假设为char
- typedef struct BiTNode
- {
- ElemType data;
- struct BiTNode*lchild,*rchild;//左右孩子指针
- } BiTNode,*BiTree;
- //打印主界面
- void printMain()
- {
- printf("**********************************************************\n");
- printf("\t 1、建立二叉树\n");
- printf("\t 2、前序遍历二叉树\n");
- printf("\t 3、中序遍历二叉树\n");
- printf("\t 4、后序遍历二叉树\n");
- printf("\t 0、结束\n");
- printf("**********************************************************\n");
- }
- //创建二叉树
- BiTree CreateBiTree(BiTree T)
- {
- char ch;
- ch=getchar();
- if(ch=='#')
- T=NULL;
- else{
- if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
- printf("Error!");
- T->data=ch;
- T->lchild=CreateBiTree(T->lchild);
- T->rchild=CreateBiTree(T->rchild);
- }
- return T;
- }
- //前序遍历
- void PreOrder(BiTNode *root)
- {
- if(root==NULL) return;
- printf("%c",root->data);
- PreOrder(root->lchild);
- PreOrder(root->rchild);
- }
- //中序遍历
- void InOrder (BiTNode *root)
- {
- if(root==NULL)
- return;
- InOrder(root->lchild);
- printf("%c",root->data);
- InOrder(root->rchild);
- }
- //后序遍历
- void PostOrder(BiTNode *root)
- {
- if(root==NULL)
- return;
- PostOrder(root->lchild);
- PostOrder(root->rchild);
- printf("%c",root->data);
- }
- int main()
- {
- BiTree A=NULL;
- int i;
- do{
- // system("cls");
- printMain();
- printf("请选择操作数(1,2,3,4,0):");
- scanf("%d",&i);
- switch(i)
- {
- case 1:
- {
- printf("创建二叉树:");
- A = CreateBiTree(A);
- break;
- }
- case 2:
- {
- printf("前序遍历二叉树:");
- PreOrder(A);
- break;
- }
- case 3:
- {
- printf("中序遍历二叉树:");
- InOrder(A);
- break;
- }
- case 4:
- {
- printf("后序遍历二叉树:");
- PostOrder(A);
- break;
- }
- case 0:
- exit(0);
- }
- printf("\n");
- }while( i==1 || i==2 || i==3 || i==4 || i==0 );
- return 0;
- }