//頭文件
#include <stdio.h>
#include <stdlib.h>
typedef char BiElemType;
typedef struct BiTNode{
BiElemType c;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
//tag結構體是輔助隊列使用的
typedef struct tag{
BiTree p;
struct tag *pnext;
}tag_t,*ptag_t;
#include "function.h"//頭文件,可以直接複製粘貼過來寫在一個cpp裏
int main() {
BiTree pnew;//用來指向新申請的樹結點
BiTree tree=NULL;//tree是指向樹根的,代表樹
char c;
ptag_t phead=NULL,ptail=NULL,listpnew=NULL,pcur;
//abcdefghij
while(scanf("%c",&c))
{
if(c=='\n')
{
break;//讀到換行就結束
}
//calloc申請的空間大小是兩個參數直接相乘,並對空間進行初始化,賦值為0
pnew=(BiTree)calloc(1, sizeof(BiTNode));
pnew->c=c;
//給隊列結點申請空間
listpnew=(ptag_t) calloc(1,sizeof(tag_t));
listpnew->p=pnew;
//如果是樹的第一個結點
if(NULL==tree){
tree=pnew;//tree指向樹的根結點
phead=listpnew;//第一個結點既是隊列頭也是隊列尾
ptail=listpnew;
pcur=listpnew;//pcur要指向要進入樹的父親元素
}else{
//讓元素先入隊列
ptail->pnext=listpnew;
ptail=listpnew;
//接下來把b結點放入樹中
if(NULL==pcur->p->lchild){
pcur->p->lchild=pnew;//pcur->p左孩子爲空就放入左孩子
} else if(NULL==pcur->p->rchild){
pcur->p->rchild=pnew;//pcur->p右孩子爲空就放入右孩子
pcur=pcur->pnext;//當前結點左右孩子都滿了,pcur就指向下一個
}
}
}
return 0;
}