Level-order Traversal

1884 단어 데이터 구조
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 
#include 

#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

result:
void Level_order ( Tree T, void (*visit)(Tree ThisNode) )
{
 Tree a[100];
 int front,rear,i;
 front=rear=i=0;
 a[rear]=T;
 if(a[rear]==NULL)
  return;
 while(i<=rear)
 {
  if(a[i]->Left!=NULL)
  {
     rear++;
     a[rear]=a[i]->Left;
  }
  if(a[i]->Right!=NULL)
  {
   rear++;
   a[rear]=a[i]->Right;
  }
   i++;
 }
 for(i=front;i<=rear;i++)
  (*visit)(a[i]);
 return ;
}

좋은 웹페이지 즐겨찾기