够详细的了吧,给个赞不过分吧。
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;//将变量进行重定义-方便一次性改变数据类型
typedef struct BiTNode//定义树的结点
{
char data;
struct BiTNode *lchild,*rchild;//定义结构指针作用相当于用来递归进行使用
}BiTNode,*BiTree;//不只是指树而且还可以在对用结点进行指针对应地址标志
void CreateBiTree(BiTree *T)//创造二叉树,这个使中序遍历的,传入的参数是树的指针也可以说是数的地址
{
char c;//定义要存在树里面得到数据
scanf("%c",&c);//输入数据
if(' '==c)//判断传进去数据是否为空或则为空格
{
*T=NULL;//如果为空,则变成空指针没有后来的指向
}
else//如果输入的不为空的话就进行数据的存储和指针的指向
{
*T=(BiTNode *)malloc(sizeof(BiTNode));//创造出对应的树的空间
(*T)->data=c;//将数据存储进去其中T->data 这个是this指针地指向就是相当于x=x(是指后面地x是改过地)
CreateBiTree(&(*T)->lchild);//嵌套中的嵌套,就是将下一个左右孩子的地址拿出来再次创造出新的空间
CreateBiTree(&(*T)->rchild);//如果没有或则是输入为空则停止不再输入,和创造
}
}
void visit(char c,int level)//读取在树中存储的数据
{
printf("%c位于第%d层",c,level);//打印数据
printf("\n");
}
void PreOrderTraverse(BiTree T,int level)//前序遍历
{
if(T)
{
visit(T->data,level);
PreOrderTraverse(T->lchild,level+1);
PreOrderTraverse(T->rchild,level+1);
}
}
int main()
{
int level =1;
BiTree T=NULL;//最开始就行NULL定义最初话进行
CreateBiTree(&T);//开始创造用户需要的树开始
PreOrderTraverse(T,level);//将头结点和头树开始遍历查找
return 0;
}
输出结构为:
空格则为该节点为空/空指针。