读取字符串abcdefghij,然后层次建树建立一颗二叉树,然后前序遍历输出abdhiejcfg,注意不要打印前序
#include <stdio.h>
#include <stdlib.h>
//读取字符串abcdefghij,然后层次建树建立一颗二叉树,然后前序遍历输出abdhiejcfg,注意不要打印前序遍历几个汉字
typedef char BiElemType;
//定义树节点
typedef struct BiTNode{
BiElemType c;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
//定义辅助队列
typedef struct Queue{
BiTree p;
struct Queue *pnext;
}Queue,*BiQueue;
//前序遍历二叉树
void PreOrder(BiTree tree){
if(tree==NULL){
return;
}
putchar(tree->c);
PreOrder(tree->lchild);
PreOrder(tree->rchild);
}
int main() {
BiTree Tree=NULL;//定义树根
BiTree pnew;//接收新的树节点
char c;//接收插入的字符
BiQueue p_head=NULL,p_tial=NULL;//定义辅助队列对头对尾
BiQueue pur=NULL,newlist=NULL;//定义游标指针
while (scanf("%c",&c)){
if(c=='\n'){
break;
}
pnew=(BiTree)calloc(1,sizeof(BiTNode));
pnew->c=c;
newlist= (BiQueue)calloc(1,sizeof(Queue));
newlist->p=pnew;
if(Tree==NULL){//操作辅助队列
Tree=pnew;
p_head=newlist;
p_tial=newlist;
pur=newlist;
continue;
} else if(Tree!=NULL){
p_tial->pnext=newlist;
p_tial=newlist;
}
if(pur->p->lchild==NULL){//操作树节点,输入abcdefg
pur->p->lchild=pnew;
} else if(pur->p->rchild==NULL){
pur->p->rchild=pnew;
pur=pur->pnext;
}
}
PreOrder(Tree);
return 0;
}