思路
可以借助队列来实现,因为队列的特性是先进先出。可以从根结点,左结点,右结点依次入队列。然后再逐一输队首结点的值,即实现层次遍历。
#include <iostream>
#include <queue>
using namespace std;
//二叉树结构
typedef struct BinaryTreeNode
{
char m_chValue;
BinaryTreeNode *m_pLChild;
BinaryTreeNode *m_pRChild;
}BiTree;
//层次遍历二叉树
void LayerTranverse(BiTree *pTree)
{
if (NULL == pTree)
{
return ;
}
BiTree *pTemp = NULL;
queue<BiTree*> q;
q.push(pTree);
while (!q.empty())
{
pTemp = q.front();
q.pop();
cout<<pTemp->m_chValue<<endl;
//先左子树入队列
if (NULL != pTemp->m_pLChild)
{
q.push(pTemp->m_pLChild);
}
//再右子树入队列
if (NULL != pTemp->m_pRChild)
{
q.push(pTemp->m_pRChild);
}
}
}
//先序创建二叉树
BiTree *CreateBiTree(BiTree *pTree = NULL)
{
char ch;
cin>>ch;
if ('#' == ch)
{
pTree = NULL;
}
else
{
pTree = new BiTree;
pTree->m_chValue = ch;
pTree->m_pLChild = CreateBiTree(pTree->m_pLChild);
pTree->m_pRChild = CreateBiTree(pTree->m_pRChild);
}
return pTree;
}
//先序遍历二叉树
void TraverseTree(BiTree *root)
{
if (NULL != root)
{
cout<<root->m_chValue<<endl;
TraverseTree(root->m_pLChild);
TraverseTree(root->m_pRChild);
}
}
int main()
{
BiTree *root = NULL;
root = CreateBiTree();
// TraverseTree(root);
cout<<"层次遍历"<<endl;
LayerTranverse(root);
return 1;
}