Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399089
  • 博文数量: 101
  • 博客积分: 2207
  • 博客等级: 大尉
  • 技术积分: 2508
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 20:45
文章分类

全部博文(101)

文章存档

2013年(15)

2012年(86)

我的朋友

分类: C/C++

2012-09-25 13:41:53

输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入

8
/ /
6 10
/ / / /
5 7 9 11

输出8 6 10 5 7 9 11。


点击(此处)折叠或打开

  1. #include <iostream>

  2. struct Node
  3. {
  4.     int data_;
  5.     Node* left;
  6.     Node* right;

  7.     Node(int d = 0,Node* lr = 0,Node* rr = 0):data_(d),left(lr),right(rr) {}
  8. };

  9. void bfs(Node* root)
  10. {
  11.     const int MAXN = 256;
  12.     Node* q[MAXN];
  13.     int front = 0, rear = 0;

  14.     q[rear++] = root;
  15.     while (front < rear)
  16.     {
  17.         Node*& value = q[front++];
  18.         if (value->left) q[rear++] = value->left;
  19.         if (value->right) q[rear++] = value->right;

  20.     }
  21.     front = 0;
  22.     while (front < rear)
  23.     {
  24.         printf("%d,",q[front++]->data_);
  25.     }
  26. }

  27. int main()
  28. {
  29.     Node *root = new Node(8);
  30.     root->left = new Node(6);
  31.     root->right = new Node(10);
  32.     root->left->left = new Node(5);
  33.     root->left->right = new Node(7);

  34.     root->right->left = new Node(9);
  35.     root->right->right = new Node(11);

  36.     bfs(root);
  37. }

阅读(497) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~