赞题库-背景图
问答题

[说明]
一般的树型结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点。例如,下图(a)中所示的树的孩子-兄弟表示如下图(b)中所示。


函数LeVelTraVerse()的功能是对给定树进行层序遍历。例如,对图中所示的树进行层序遍历时,节点的访问次序为D B A E F P C。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示。
实现队列基本操作的函数原型
函数原型 说明
void InitQueue(Queue *Q) 初始化队列
bool IsEmpty(Queue Q) 判断队列是否为空,若是则返回TRUE,否则返回FALSE
void EnQueue(Queue *Q, TreeNode p) 元素入队列
void DeQueue(Oueue *Q, TreeNode *p) 元素出队列
Bool、Status类型定义如下:
typedef enum {FALSE = 0, TRUE=1} Bool;
typedef enum {OVERFLOW=-2, UNDERFLOW=-1, ERROR=0, OK=1} Status;
树的二叉链表节点定义如下:
typedef struct Node {
char data;
struct Node *firstchild, *nextbrother;
} Node, *TreeNode;
函数LevelTraverse的代码如下:
StatUS LevelTraverse(TreeNode root)
{ /*层序遍历树,树采用孩子-兄弟表示法,root是树根节点的指针*/
Queue tempQ;
TreeNode ptr, brotherptr;
if (!root)
return ERROR;
InitQueue (&tempQ);
______;
brotherptr = root→nextbrother;
while (brotherptr)
{
EnQueue (&tempQ, brotherptr);
______;
} /*end-while*/
while ______
{
______;
printf ("%c\t", ptr→data);
if (______)continue;
______;
brotherptr = ptr→firstchild→nextbrother;
while (brotherptr)
{
EnQueue (&tempQ, brotherptr);
______;
} /*end-while*/
} /*end-while*/
return OK;
} /*LevelTraverse*/

【参考答案】

EnQueue(&tempQ, root)
brotherptr=brotherptr→nextbrothe......

(↓↓↓ 点击‘点击查看答案’看完整答案 ↓↓↓)
热门试题

问答题[说明]栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stack Top),而另一端称为栈底(Stack Bottom)。栈的基本操作包括创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈 入栈(Push)、弹栈 出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储,如下图所示。以下C代码采用链式存储结构实现一个整数栈操作。[C程序]typedef struct List{int data; 栈数据struct List *next; 上次入栈的数据地址} LiSt;typedef struct Stack {List* pTop; 当前栈顶指针} Stack;Stack* NewStack() {return (Stack*) calloc (1, sizeof (Stack));)int IsEmpty (Stack* S) 判断栈S是否为空栈{If (______)return 1;return 0;}int Top (Stack* S) 获取栈顶数据。若栈为空,则返回机器可表示的最小整数{if (IsEmpty(S)) return INT_MIN;return ______;}Void Push (Stack* S, int theData) 将数据theData压栈{LiSt* newNode;newNode=(List*) calloc (1, Sizeof(List));newNode→data=theData;newNode→next=S→pTop;S→Top=______;}Void Pop (Stack* S) 弹栈{List* lastTop;If (IsEmpty(S)) return;lastTop=S→pTop;S→pTop=______;Free (lastTop);}#define MD(a) a<<2int main(){int i;Stack* myStack;myStack=NewStack();Push (myStack, MD(1));PuSh (myStack, MD(2));Pop (myStack);Push (myStack, MD(3)+1);while (!IsEmpty (myStack)){printf ( %d , Top (myStack));Pop (myStack);}return();}以上程序运行时的输出结果为______。