输入acd空格空格e空格空格b空格fg空格空格空格,请问计算机是为什么知道b是a的右孩子呢?
#include <stdio.h>#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
//创建一棵二叉树,约定用户遵循前序遍历的方式输入数据
void CreateBiTree(BiTree *T)
{
ElemType c;
scanf("%c", &c);
if( ' ' == c )
{
(*T) = NULL;
}
else
{
(*T) = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree( &(*T)->lchild );
CreateBiTree(&(*T)->rchild ); //相当于将(*T)->xchild的结点指针赋给了下一个结点
}
}
//访问二叉树结点的具体操作
void visit(ElemType c, int level)
{
printf("%c位于第%d层\n", c, level);
}
//前序遍历二叉树
void PreOrderTraverse(BiTree T, int level)
{
if( T )
{
visit(T->data, level); //<1>
PreOrderTraverse( T->lchild, level+1 ); //<2>
PreOrderTraverse( T->rchild, level+1 ); //<3>
}//若是前序遍历即<1>、<2>、<3>;而若是中序遍历即<2>、<1>、<3>;而若是后序遍历即<2>、<3>、<1>
}
int main()
{
int level = 1;
BiTree T = NULL;
CreateBiTree(&T);
PreOrderTraverse(T, level);
return 0;
}