SDUWH 查找 6-4 Level-order Traversal

版权声明:while (!success) try(); https://blog.csdn.net/qq_35850147/article/details/88960400

6-4 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

题解:

#include <stdbool.h>

void Level_order(Tree T, void (*visit)(Tree ThisNode))
{
    if (T == NULL)
        return;
    Tree List[1000] = {NULL};
    int cnt = 0;
    bool flag = true;
    List[cnt++] = T;
    while (flag)
    {
        Tree t = NULL;
        flag = false;
        for (int i = 0; i < cnt; i++)
            if (List[i])
            {
                t = List[i];
                List[i] = NULL;
                flag = true;
                break;
            }
        if (t)
        {
            (*visit)(t);
            if (t->Left)
                List[cnt++] = t->Left;
            if (t->Right)
                List[cnt++] = t->Right;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35850147/article/details/88960400
今日推荐