配合队列容器queue的入队出队操作,就可以实现二叉树的层次遍历。
#include<iostream>
#include<queue>
using namespace std;
class TreeNode
{
public:
char ch;
struct TreeNode* lchild;
struct TreeNode* rchild;
};
void CreatTree(TreeNode*& tree)
{
char ch;
ch = getchar();
TreeNode* node;
if (ch == '#')
{
tree = NULL;
}
else
{
tree = new TreeNode;
tree->ch = ch;
CreatTree(tree->lchild);
CreatTree(tree->rchild);
}
}
void byLayer(TreeNode* root)
{
queue<TreeNode*>q;
q.push(root);
while (!q.empty())
{
TreeNode* temp = q.front();
if (temp == nullptr)
{
//cout << "temp为空指针" << endl;
return;
}
cout << temp->ch << " ";
q.pop();
if (temp->lchild)
{
q.push(temp->lchild);
}
if (temp->rchild)
{
q.push(temp->rchild);
}
}
}
int main()
{
TreeNode* tree;
CreatTree(tree);
if (tree == nullptr)
{
cout << "为空指针" << endl;
}
byLayer(tree);
system("pause");
return 0;
}
测试结果: