#代码如下
function.h
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
//树节点
typedef struct BitTNode{
ElemType c;
struct BitTNode *lchild;
struct BitTNode *rchild;
}BitTNode,*BitTree;
//辅助队列
typedef struct QNode{
BitTNode *p;//存的是树节点的地址
struct QNode *next;
}QNode,*TQueue;
main.cpp
#include "founction.h"
int main(){
BitTree T;
BitTree Tnew;
char element;
TQueue Qhead=NULL,Qrail=NULL,Qnew=NULL,Qcurt=NULL;
while(scanf("%c",&element))
{
if(element=='/n')
{
break;
}
Tnew=(BitTree)calloc(1,sizeof(BitTNode));
Qnew=(TQueue)calloc(1,sizeof(QNode));
Tnew->c=element;
Qnew->p=Tnew;
if(T==NULL){
T=Tnew;
Qhead=Qnew;
Qrail=Qnew;
Qcurt=Qnew;
continue;
}else{
Qrail->next=Qnew;
Qrail=Qnew;
}
if(NULL==Qcurt->p->lchild)
{
Qcurt->p->lchild=Tnew;
}else if(NULL==Qcurt->p->rchild)
{
Qcurt->p->rchild=Tnew;
Qcurt=Qcurt->next;
}
}
return 0;
}
#过程描述
此处建立二叉树采用了辅助队列
function.h文件中是树节点和辅助队列节点的声明。
首先,预设输入的是字符abcdefghji,使用while循环读取,读取到换行后退出循环。然后,使用calloc为树节点和队列节点申请空间并置空。接着if判断节点是否为根节点,若为根节点,则令新节点入队、辅助队列的头指针、尾指针、Qcurt指针相等。最后根据Qcurt指针判断树节点的左孩子和右孩子是否为空,并存入数据。
总结
二叉树的建立使用了辅助队列,在处理数据的过程中,先使数据进队,再进树。Qcurt指针表示二叉树从左到右进树的顺序,若Qcurt指针所指的节点已满,则Qcurt指针才指向辅助队列中的下一个节点。