ldjhust

工欲善其事 必先利其器

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目:
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
7
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11。

二叉树节点的数据结构:

1 struct BinaryTreeNode
2 {
3     int nData;
4 
5     BinaryTreeNode *lChild;
6     BinaryTreeNode *rChild;
7 };

思路:按层次遍历一般用队列很容易实现,直接上代码:

 1 void LevelTraversalBinaryTree(BinaryTreeNode *root)
 2 {
 3     assert (root != NULL);
 4 
 5     BinaryTreeNode *Queue[MAX];
 6     int nHead = -1;
 7     int nTail = -1;
 8 
 9     // 根节点首先入栈
10     Queue[++nTail] = root;
11     while (nHead < nTail)
12     {
13         // 访问根节点
14         ++nHead;
15         cout << Queue[nHead]->nData << " ";
16 
17         // 要求层次访问顺序从左到右,因此做孩子先入队列
18         if (Queue[nHead]->lChild != NULL)
19         {
20             // 将根节点的左孩子加入到队列
21             Queue[++nTail] = Queue[nHead]->lChild;
22         }
23 
24         if (Queue[nHead]->rChild != NULL)
25         {
26             // 将根节点的右孩子加入队列
27             Queue[++nTail] = Queue[nHead]->rChild;
28         }
29     }
30 }

给出一个测试结果:

posted on 2013-05-01 16:41  ldjhust  阅读(616)  评论(2编辑  收藏  举报