function.h:
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
//树的链式存储结构--创建一个完全二叉树
//层次建树必须要用队列
typedef struct BiTiNode {
ElemType data;//数据域
struct BiTiNode* lchild, * rchild;//左右孩子指针
}BiTiNode, * BiTree;
//队列(用于辅助层次建树)
typedef struct tag {
BiTree p;//树的某个结点的地址值
struct tag* pnext;
}tag_t,*ptag_t;
main.cpp:
#include "function.h"
int main() {
BiTree pnew;//临时存放
char c;
BiTree tree = NULL;//树根
ptag_t phead=NULL,ptail = NULL, listpnew = NULL, pcur = NULL;//phead就是队列头,ptail就是队列尾
while (scanf("%c",&c)!=EOF)
{
if (c == '\n')
{
break;
}
pnew = (BiTree)malloc(1 * sizeof(BiTiNode));
pnew->lchild = NULL;//一开始先将树根的左右孩子设为Null
pnew->rchild = NULL;
pnew->data = c;//存入数据
listpnew = (ptag_t)malloc(1 * sizeof(tag_t));
listpnew->p = pnew;//存放在队列里的是树每个结点对应的地址
if (tree==NULL)
{
tree = pnew;
phead = listpnew;
ptail = listpnew;
pcur = listpnew;
continue;
}
else
{
ptail->pnext = listpnew;
ptail = listpnew;
}
if (pcur->p->lchild==NULL)
{
pcur->p->lchild = pnew;
}
else if (pcur->p->rchild==NULL)
{
pcur->p->rchild = pnew;
pcur = pcur->pnext;
}
}
};