设置结点类:
typedef struct Node
{
ElemType data;//存放该结点数据
struct Node *lchild,*rchild;//存放左右孩子指针
}BiTNode,*BiTree;
前序法创建一棵二叉树:注意递归法传入函数的参数为指向指针的指针
CreateBiTree(BiTree *T)
{
char c;
scanf("%c",&c);
//空格表示虚结点,如果不是虚结点,则建立新结点。
if(c==' ')
{*T=NULL;}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=c;
CreateBiTree(&(*T)->lchild);//创建左子树
CreateBiTree(&(*T)->rchild);//创建右子树
}
}
输入示例如下:
递归遍历二叉树:前序遍历
PreOrderTravel(BiTree T,int level)
{
if(T)
{
printf("%c位于第%d层\n",T->data,level);//访问二叉树结点
PreOrderTravel(T->lchild,level+1);
PreOrderTravel(T->rchild,level+1);
}
}
递归遍历二叉树:中序遍历
PreOrderTravel(BiTree T,int level)
{
if(T)
{
PreOrderTravel(T->lchild,level+1);
printf("%c位于第%d层\n",T->data,level);//访问二叉树结点
PreOrderTravel(T->rchild,level+1);
}
}
递归遍历二叉树:后序遍历
PreOrderTravel(BiTree T,int level)
{
if(T)
{
PreOrderTravel(T->lchild,level+1);
PreOrderTravel(T->rchild,level+1);
printf("%c位于第%d层\n",T->data,level);//访问二叉树结点
}
}
输出每个结点的值位于树的第几行
int main()
{
int level=1;
BiTree T=NULL;
printf("请添加结点数据,伪结点用空格表示 输入多个空格结束程序:");
CreateBiTree(&T);
PreOrderTravel(T,level);
return 0;
}