思想:因为是层序遍历,从上到下,从左到右,所以就是采用FIFO,先进先出的原则,使用队列来存储二叉树的结点,就可以实现层序遍历。
template<class T>
struct Tree_Node
{
T data;
Tree_Node* left;
Tree_Node* right;
Tree_Node(const T& val)
:data(val)
, left(NULL)
, right(NULL)
{}
};
typedef Tree_Node<int> Node;
void LevelOrder(Node* root)
{
if (NULL == root)
{
return;
}
queue<Node*> q;
q.push(root);
//注意这里的判断条件,必须是 队列不为空,因为要遍历每一个结点
while (!q.empty())
{
Node* Front = q.front();
q.pop();
if (NULL == Front)
{
continue;
}
cout << Front->data << " ";
q.push(Front->left);
q.push(Front->right);
}
}