按层次打印二叉树

题目:
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
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 }

给出一个测试结果:

原文地址:https://www.cnblogs.com/ldjhust/p/3053339.html