二叉树顺序存储结构描述如下:
typedef struct BiTNode{
BiElem data;
BiTNode* lchild;
BiTNode* rchild;
}BiTNode,*BiTree;
借助一个辅助队列来辅助建树,结构描述如下:
typedef struct tag {
BiTree p;
tag* pnext;
}tag,*p_tag;
二叉树层次建树实现方法如下:
int main()
{
BiTree pnew;//存放新数据的节点
int i, j, pos;
char c;
BiTree tree = NULL;//树根节点
ptag_t phead = NULL;//辅助队列的队头
ptag_t ptail = NULL;//辅助队列的队尾
ptag_t listpnew;
ptag_t pcur = NULL;//游动指针
//abdhiejcfg
while (scanf("%c",&c) != EOF)//循环读取
{
if ('\n' == c)
{
break;
}
pnew = (BiTree)calloc(1, sizeof(BiTNode));
//申请一个二叉树节点大小空间12byte,并对空间初始化为0
pnew->data = c;
listpnew = (ptag_t)calloc(1, sizeof(tag_t));//给队列节点申请空间
listpnew->p = pnew;//存放树某节点的地址
if (NULL == tree)
{
tree = pnew;//树的根
phead = listpnew;//队列头
ptail = listpnew;//队列尾
pcur = listpnew;
continue;
}
else
{
ptail->pnext = listpnew;//新结点放入链表,通过尾插法
ptail = listpnew;//ptail指向队列尾部
}
//pcur始终指向要插入的结点的位置
if (NULL == pcur->p->lchild)//把新结点放入树
{
pcur->p->lchild = pnew;//把新结点放到要插入结点的左边
}
else if (NULL == pcur->p->rchild)
{
pcur->p->rchild = pnew;//把新结点放到要插入结点的右边
pcur = pcur->pnext;//左右都放了结点后,pcur指向队列的下一个
}
}
本文介绍了如何使用C/C++实现二叉树的层次遍历,通过一个辅助队列进行存储和构建,详细阐述了层次建树的具体步骤和方法。

4337

被折叠的 条评论
为什么被折叠?



