二叉树层次遍历,又称为宽度优先搜索,按树的层次依次访问树的节点。层次遍历使用队列对遍历节点进行存储,先进入队列的节点,优先遍历拓展其左孩子与右孩子。
#include<stdio.h>
#include<vector>
#include<queue>
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(NULL), right(NULL){}
};
void BFS(TreeNode* root)
{
std::queue<TreeNode*> Q;
Q.push(root);
while (!Q.empty())
{
TreeNode* node = Q.front();
printf("[%d]", node->val);
Q.pop();
if (node->left)
{
Q.push(node->left);
}
if (node->right)
{
Q.push(node->right);
}
}
}
int main()
{
TreeNode a(1);
TreeNode b(2);
TreeNode c(5);
TreeNode d(3);
TreeNode e(4);
TreeNode f(6);
a.left = &b;
a.right = &c;
b.left = &d;
b.right = &e;
c.right = &f;
BFS(&a);
return 0;
}
运行结果为:
[1][2][5][3][4][6]