参考:https://blog.youkuaiyun.com/wardseptember/article/details/78879360
要进行层序遍历,需要建立一个循环队列。先将二叉树头结点入队列,然后出队列,访问该结点,
如果它有左子树,则将左子树的根结点入队;
如果它有右子树,则将右子树的根结点入队。
然后出队列,对出队结点访问,如此反复,直到队列为空为止。
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
typedef struct BTNode {
char val;
struct BTNode *left, *right;
BTNode(char x) :
val(x), left(nullptr), right(nullptr) {
}
}BTNode, *BTree;
//创建一棵二叉树
BTree createTree() {
BTree pA = new BTNode('A');
BTree pB = new BTNode('B');
BTree pC = new BTNode('C');
BTree pD = new BTNode('D');
BTree pE = new BTNode('E');
BTree pF = new BTNode('F');
BTree pG = new BTNode('G');
BTree pH = new BTNode('H');
BTree pI = new BTNode('I');
pA->left = pC;
pA->right = pB;
pC->left = pD;
pC->right = pE;
pB->right = pF;
pD->left = pG;
pE->right = pH;
pF->left = pI;
return pA;
}
void levelOrderBTree(BTree pT) {
if (pT != nullptr) {
deque<BTNode *> que;
que.push_back(pT);
BTNode *q;
while (!que.empty()) {
q = que.front();
que.pop_front();
//打印节点,也可以执行其他操作
cout << q->val;
if (q->left != nullptr) {
que.push_back(q->left);
}
if (q->right != nullptr) {
que.push_back(q->right);
}
}
}
}
int main() {
BTree pTree = createTree();
cout << "层序遍历:";
levelOrderBTree(pTree);
cout << endl;
}