创建二叉树
//先序遍历创建二叉树
void createBiTree(BiTree *t)
{
int e;
scanf("%d",&e);
if(e==-1)//-1表示空节点
*t=NULL;
else
{
*t=(BiTree)malloc(sizeof(BiTNode));
(*t)->data=e;
printf("请输入%d的左子节点的值:",e);
createBiTree(&(*t)->lchild);
printf("请输入%d的右子节点的值:",e);
createBiTree(&(*t)->rchild);
}
}
先序遍历二叉树
//先序遍历
void PreOrderTraverse(BiTree t)
{
if(t!=NULL)
{
printf("%d",t->data);
PreOrderTraverse(t->lchild);
PreOrderTraverse(t->rchild);
}
}
中序遍历二叉树
//中序遍历
void InOrderTraverse(BiTree t)
{
if(t!=NULL)
{
InOrderTraverse(t->lchild);
printf("%d",t->data);
InOrderTraverse(t->rchild);
}
}
后序遍历二叉树
//后序遍历
void PostOrderTraverse(BiTree t)
{
if(t!=NULL)
{
PostOrderTraverse(t->lchild);
PostOrderTraverse(t->rchild);
printf("%d",t->data);
}
}
销毁二叉树
//销毁二叉树
void DeleteBiTree(BiTree t)
{
if(t==NULL)
{
return;
}else
{
free(t);
}
}
总代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 200
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序遍历创建二叉树
void createBiTree(BiTree *t)
{
int e;
scanf("%d",&e);
if(e==-1)//-1表示空节点
*t=NULL;
else
{
*t=(BiTree)malloc(sizeof(BiTNode));
(*t)->data=e;
printf("请输入%d的左子节点的值:",e);
createBiTree(&(*t)->lchild);
printf("请输入%d的右子节点的值:",e);
createBiTree(&(*t)->rchild);
}
}
//先序遍历
void PreOrderTraverse(BiTree t)
{
if(t!=NULL)
{
printf("%d",t->data);
PreOrderTraverse(t->lchild);
PreOrderTraverse(t->rchild);
}
}
//中序遍历
void InOrderTraverse(BiTree t)
{
if(t!=NULL)
{
InOrderTraverse(t->lchild);
printf("%d",t->data);
InOrderTraverse(t->rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree t)
{
if(t!=NULL)
{
PostOrderTraverse(t->lchild);
PostOrderTraverse(t->rchild);
printf("%d",t->data);
}
}
//销毁二叉树
void DeleteBiTree(BiTree t)
{
if(t==NULL)
{
return;
}else
{
free(t);
}
}
int main()
{
BiTree t;
printf("请输入根节点的值:");
createBiTree(&t);
printf("先序遍历二叉树为:");
PreOrderTraverse(t);
printf("\n");
printf("中序遍历二叉树为:");
InOrderTraverse(t);
printf("\n");
printf("后序遍历二叉树为:");
PostOrderTraverse(t);
printf("\n");
DeleteBiTree(t);
printf("二叉树已销毁\n");
return 0;
}
现象