6-11 Level-order Traversal(25 分)

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 ThisNode being 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) )
{
    Tree s[1000];
    int head = 0,tail = 0;
    if(T)s[tail ++] = T;
    while(head < tail)
    {
        if(s[head] -> Left)s[tail ++] = s[head] -> Left;
        if(s[head] -> Right)s[tail ++] = s[head] -> Right;
        (*visit)(s[head ++]);
    }
}
原文地址:https://www.cnblogs.com/8023spz/p/7701238.html