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