1673: 树-二叉树的创建和层次遍历
金币值:2
定数:9
时间限制:1.000 s
内存限制:128 M
正确:5
提交:5
正确率:100.00% 命题人:
题目描述
输入若干字符序列('#'代表空),按先序序列建立二叉树(采用二叉链表存储),输出该二叉树的层次遍历序列。部分代码如下,其中函数InitQueue初始化一个队列,EnQueue 入队列,DeQueue 出队列,EmptyQueue 判断队列是否为空,InitBiTree用于初始化一棵空树,CreateBiTree根据输入字符串创建一个二叉链表存储的树,LevelOrderTraverse层次遍历二叉树。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; } BiTNode,*BiTree; typedef BiTree QElemType; typedef struct { QElemType *base; int front; int rear; /*若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; void InitQueue(SqQueue &Q); int EnQueue(SqQueue &Q, QElemType e); int DeQueue(SqQueue &Q, QElemType &e); int EmptyQueue(SqQueue Q); void InitBiTree(BiTree &T); void CreateBiTree(BiTree &T); void LevelOrderTraverse(BiTree T); int main(void) { BiTree T; InitBiTree(T); CreateBiTree(T); LevelOrderTraverse (T); return 0; } void InitQueue(SqQueue &Q) { Q.base=new BiTree[MAXSIZE]; if(!Q.base) exit(OVERFLOW); Q.front=Q.rear=0; } int EnQueue(SqQueue &Q, QElemType e) { if((Q.rear+1)%MAXSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXSIZE; return OK; } int DeQueue(SqQueue &Q, QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return OK; } int EmptyQueue(SqQueue Q) { if(Q.front==Q.rear) return 1; else return 0; } /*仅提交以下代码*/ void InitBiTree(BiTree &T) { } /* 按先序输入二叉树中结点的值(一个字符),#表示空树,构造二叉链表表示二叉树T。 */ void CreateBiTree(BiTree &T) { char ch; } void LevelOrderTraverse(BiTree T) { SqQueue Q; InitQueue(Q); QElemType p; }
输入格式
在一行上输入若干个字符以建立一棵二叉树,遇‘#’表示建立一个空二叉树。
输出格式
二叉树的层次遍历序列
输入样例 复制
AC#D#B##E##
输出样例 复制
ACEDB