遍写程序,实现对二叉树的层次遍历。 按先序序列建立二叉树的二叉链表(用#补齐空结点),然后借助队列对二叉树进行层次遍历,并输出遍历结果。 提示: 1. 循环顺序队列和链队列均可,涉及到的操作:初始化队列、入队、出队和判断队列是否为空; 2. 若定义二叉链表类型为BiTree,则队列的数据元素类型QElemType为BiTree类型。
时间: 2023-06-02 20:06:48 浏览: 212
C语言描述):
1.首先确定二叉链表边结构体的定义:
typedef char ElemType;//假设二叉树的节点是字符型
typedef struct BiTNode
{
ElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
2.然后定义一个函数创建二叉树:
void CreateBiTree(BiTree *T)
{
//按照先序输入二叉树中节点的值(空格字符代表NULL),构造二叉链表表示的二叉树
ElemType c;
scanf("%c",&c);
if(c == ' ')
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));//生成新节点
(*T)->data = c;//将节点数据域赋值为输入值
CreateBiTree(&(*T)->lchild);//递归创建左子树
CreateBiTree(&(*T)->rchild);//递归创建右子树
}
}
3.最后实现二叉树的层次遍历:
void LevelOrderTraversal(BiTree T)
{
//采用队列来实现层次遍历
if(!T)
return;
BiTree Queue[maxsize];//定义队列
int front=0,rear=0;//队列的前后指针
Queue[rear++] = T;//将根节点入队
while(front != rear)//队列不空
{
BiTree p = Queue[front++];//将队头出队并赋值给p
printf("%c ",p->data);//输出p的数据值
//如果p节点有左孩子,则将其左孩子入队
if(p->lchild)
Queue[rear++] = p->lchild;
//如果p节点有右孩子,则将其右孩子入队
if(p->rchild)
Queue[rear++] = p->rchild;
}
}
阅读全文