二叉树的层次遍历

二叉树的层次遍历

树的层次遍历如下图所示:
二叉树的层次遍历_第1张图片

依次打印[A B G C D H E F]
算法描述:要想实现层次遍历,我们需要借助另一个数据结构「 队列 」。因为队列的特点是先进先出。利用这个特点,我们可以将已经访问过的结点的子节点存进队列里,实现每个层次的顺序不变。
先是根节点入队,如果根节点不为空,就打印根节点。接着入根节点的左孩子和右孩子(先入左孩子,再入右孩子)。如上图所示,先入A,队列不为空就打印A,再入B和G,队列不为空,就打印B。接着入C和D。然后打印G。然后将H入队。C的左右子树为空,就打印C。D的左右子树不为空就入E和F。然后将剩下的它们都打印。
代码实现:

#include 
using namespace std;

void LevelOrder(struct BtNode *ptr)
{
	if(NULL == ptr) return ;
	queue<struct BtNode *> qu;
	qu.push(ptr);
	while(!qu.empty())
	{
		ptr = qu.front();
		qu.pop();
		cout << ptr->data << " ";
		if(ptr->leftchild != NULL)
		{
			qu.push(ptr->leftchild);
		}
		if(ptr->rightchild != NULL)
		{
			qu.push(prt->rightchild);
		}
	}
	cout << endl;
}

你可能感兴趣的:(数据结构,面试题)