对于二叉树,可能大家都会很熟悉前序,中序和后序遍历:
前序遍历就是先访问父结点,然后访问左子结点,最后访问右子结点。
中序遍历就是先访问左子结点,然后访问父结点,最后访问右子结点。
后续遍历就是先访问左子结点,然后访问右子结点,最后访问父结点。
其实就是按照访问父结点的顺序来定义的。
好,那么按层遍历应该怎么实现呢?先看图
按层遍历的结果是:15,6,18,3,7,17,20,2,4,13
就是说我们在访问下一层之前需要先把当前层全部访问完,那么我们只需要用一个队列将每一层的结点都存起来然后再访问就可以实现按层访问了。
void printNodeByLevelWithQueue(node *root)
{
if (NULL == root)
{
return;
}
node *tmp;
queue<node *>q;
q.push(root);
while (!q.empty())
{
tmp = q.front();
cout << tmp->data << " ";
if (NULL != tmp->left)
{
q.push(tmp->left);
}
if (NULL != tmp->right)
{
q.push(tmp->right);
}
q.pop();
}
cout << endl;
}