浙大数据结构基础4-1 Level-order Traversal (10分)

来源:互联网 发布:种子文件下载软件 编辑:程序博客网 时间:2024/06/07 09:28
4-1 Level-order Traversal   (10分)

Write a routine to list out the nodes of a binary tree in "level-order". List the root, then nodes at depth 1, followed by nodes at depth 2, and so on. You must do this in linear time.

Format of functions:

void Level_order ( Tree T, void (*visit)(Tree ThisNode) );

where void (*visit)(Tree ThisNode) is a function that handles ThisNodebeing visited by Level_order, and Tree is defined as the following:

typedef struct TreeNode *Tree;struct TreeNode {    ElementType Element;    Tree  Left;    Tree  Right;};

Sample program of judge:

#include <stdio.h>#include <stdlib.h>#define MaxTree 10 /* maximum number of nodes in a tree */typedef int ElementType;typedef struct TreeNode *Tree;struct TreeNode {    ElementType Element;    Tree  Left;    Tree  Right;};Tree BuildTree(); /* details omitted */void PrintNode( Tree NodePtr ){   printf(" %d", NodePtr->Element);}void Level_order ( Tree T, void (*visit)(Tree ThisNode) );int main(){    Tree T = BuildTree();    printf("Level-order:");    Level_order(T, PrintNode);    return 0;}/* Your function will be put here */

Sample Output (for the tree shown in the figure):

Level-order: 3 5 6 1 8 10 9
void Level_order ( Tree T, void (*visit)(Tree ThisNode) ){if(!T)return;int begin,end,i;begin=end=i=0;Tree q[1000];q[0]=T;while(i<=end){if(q[i]->Left)q[++end]=q[i]->Left;if(q[i]->Right)q[++end]=q[i]->Right;i++;}for(i=begin;i<=end;i++)(*visit)(q[i]);} 

1 0
原创粉丝点击