二叉树的创建与递归遍历
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node *lch;
struct Node *rch;
}BiNode, *BiTree;
void Creat1(BiTree *T); //二叉树的创建,第一种方法
BiTree Creat2() //二叉树的创建,第二种方法
void Preorder(BiTree T); //先序遍历
void Inorder(BiTree T); //中序遍历
void Postorder(BiTree T); //后续遍历
int main(void)
{
BiTree T;
Creat1(&T); //二叉树的创建,第一种方法
// T = Creat2(); //二叉树的创建,第二种方法
Preorder(T); //先序遍历
printf("\n");
Inorder(T); //中序遍历
printf("\n");
Postorder(T); //后续遍历
return 0;
}
void Creat1(BiTree *T) //二叉树的创建,第一种方法
{
char c;
printf("请输入数据:");
c = getchar();
flushall();
if(c != '$')
{
(*T) = (BiNode *)malloc(sizeof(BiNode));
(*T)->data = c;
Creat(&((*T)->lch));
Creat(&((*T)->rch));
}
else
{
(*T) = NULL;
}
}
BiTree Creat2() //二叉树的创建,第二种方法
{
BiTree T;
char c;
printf("请输入数据:");
c = getchar();
flushall();
if(c != '$')
{
T = (BiNode *)malloc(sizeof(BiNode));
T->data = c;
T->lch = Creat();
T->rch = Creat();
}
else
T = NULL;
return T;
}
void Preorder(BiTree T) //先序遍历
{
if(T)
{
printf("%c",T->data);
Preorder(T->lch);
Preorder(T->rch);
}
}
void Inorder(BiTree T) //中序遍历
{
if(T)
{
Inorder(T->lch);
printf("%c",T->data);
Inorder(T->rch);
}
}
void Postorder(BiTree T) //后续遍历
{
if(T)
{
Postorder(T->lch);
Postorder(T->rch);
printf("%c",T->data);
}
}