1.代码
#include"00_state.h"
//二叉排序树的节点结构定义
struct BinTreeNode
{
char data;
struct BinTreeNode *lchild, *rchild;
};
typedef struct BinTreeNode BinTreeNode;
typedef struct BinTreeNode * BinTreePtr;
/*
*先序建立二叉树
*ABC##DE#G##F###
*ab##c##
*输入时候每次输入上面的一个字符然后回车,上面是两个例子。
*/
Status create_bin_pretree(BinTreePtr * B){
//为了便于下面的使用
BinTreePtr BPtr=*B;
char ch;
scanf("%c%*c",&ch);
if(ch == '#'){
BPtr=NULL;
}
else
{
if(!(BPtr=(BinTreePtr)malloc(sizeof(BinTreeNode)))){
exit(OVERFLOW);
}
BPtr->data = ch;
create_bin_pretree(&(BPtr->lchild));
create_bin_pretree(&(BPtr->rchild));
}
//千万不要忘记这个,否则歇逼。
*B = BPtr;
return OK;
}
void visit_element(BinTreePtr B){
printf("%c",B->data);
}
void pre_trverse(BinTreePtr B)
{
if(B){
visit_element(B);
pre_trverse(B->lchild);//访问该结点的左孩子
pre_trverse(B->rchild);//访问该结点的右孩子
}
else{
printf("%c",'#');
}
//如果结点为空,返回上一层
return;
}
int main()
{
BinTreePtr B;
create_bin_pretree(&B);
//printf("%d\n",B);
pre_trverse(B);
return 0;
}
2.运行结果