#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream>
using namespace std;
typedef char DataType;
typedef struct node //定义树(用链表)
{
DataType data;
struct node *lchild,*rchild;
}BitreeNode;
BitreeNode *CreatBitree()//构建二叉树
{
char ch;
scanf("%c",&ch);
BitreeNode* T=NULL;
if(ch!=' ') //如果为空就跳出循环
{
T=(BitreeNode*)malloc(sizeof(BitreeNode));//创建空间
T->data=ch;
T->lchild=CreatBitree();
T->rchild=CreatBitree();
}
return T;
}
void Preorder( BitreeNode *p)//先序历遍
{
if(p!=NULL) //为空就不再遍历了,下同
{
printf("%c",p->data); //输出历遍过了的数据,下同
Preorder(p->lchild); //遍历左孩子,下同
Preorder(p->rchild); //遍历右孩子,下同
}
}
void Inoder( BitreeNode *p) //中序遍历
{
if(p!=NULL)
{
Inoder(p->lchild);
printf("%c",p->data);
Inoder(p->rchild);
}
}
void Postorder( BitreeNode *p) //后序遍历
{
if(p!=NULL)
{
Postorder(p->lchild);
Postorder(p->rchild);
printf("%c",p->data);
}
}
void DeleteTree( BitreeNode *p) //释放二叉树
{
if(p!=NULL)
{
DeleteTree(p->lchild);
DeleteTree(p->rchild);
free(p); //释放
}
}
int main()
{
BitreeNode *T=NULL;
printf("请输入一颗二叉树\n");
T=CreatBitree();
printf("\n先序遍历\n");
Preorder(T);
printf("\n中序遍历\n");
Inoder(T);
printf("\n后序遍历\n");
Postorder(T);
DeleteTree(T);
return 0;
}
二叉树的遍历(代码实现)
最新推荐文章于 2024-05-18 10:53:04 发布