二叉树的层序创建
创建步骤:
概括:队列里面出一个元素,输入两个元素作为这个元素的左右结点,然后将这两个元素中不为0的元素接着入队列
- 先输入第一个数据,如果第一个数据为0,返回NULL,表示这棵树为空,若不为0,分配一个结点,同时将该结点放进队列中
- 若队列不为空,从队列中取出一个地址,并建立这个地址
(A)
的左右孩子 - 读入一个数据(
A
左孩子的数据),如果这个数据为0,则另(A)
左孩子的地址为NULL。若不为0,先将这个结点作为(A)
的左孩子,并将这个结点的地址入队列 - 再读入一个数据(
A
右孩子的数据),如果这个数据为0,则另(A)
右孩子的地址为NULL。若不为0,先将这个结点作为(A)
的右孩子,并将这个结点的地址入队列
typedef struct TNode BinTree;
typedef int ElemenType;
#define NoInfo 0
struct TNode{
ElemenType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree()
{
ElemenType Data;
BinTree BT;//表示跟结点的地址
BinTree T;//访问左右结点
Queue Q=CreatQueue();
scanf("%d",&Data);
if(Data!=NoInfo)//判断根结点是否存在
{
BT=(BinTree)malloc(sizeof(struct TNode));
BT->Data=Data;
BT->Left=NULL;
BT->Right=NULL;
Add(BT,Q);//将根结点的地址入队
}
else
return NULL;//跟结点不存在
while(!IsEmpty(Q))
{
T=Delete(Q);//出队一个元素的地址 ,然后扫描两个元素
scanf("%d",&Data);//左结点
if(Data==NoInfo)
T->Left=NULL;
else
{
T->Left=(BinTree)malloc(sizeof(struct TNode));
T->Left->Data=Data;
T->Left->Left=T->Left->Right=NULL;
Add(T->Left,Q);
}
scanf("%d",&Data);//右结点
if(Data==NoInfo)
T->Right=NULL;
else
{
T->Right=(BinTree)malloc(sizeof(struct TNode));
T->Right->Data=Data;
T->Right->Right=T->Right->Left=NULL;
Add(T->Right,Q);//将结点入队
}
}
return BT;//返回跟结点的地址
}