一句话总结:用队列,先进先出。
#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
typedef struct Node
{
char val;
struct Node *pLeftChild;
struct Node *pRigthChild;
}TreeNode, *Tree;
//按照前序遍历方式插入元素生成树
int createTree(Tree &node)
{
char c = getchar();
cout << "node:" << c <<endl;
if ('*' == c)
{
node = NULL;
cout << "return end" <<endl;
return -1;
}
else
{
//根左右,前序方式生成
cout << "create root node" << endl;
node = new Node();
node->val = c;
cout << "create left node" << endl;
createTree(node->pLeftChild);
cout << "create right node" << endl;
createTree(node->pRigthChild);
}
return 0;
}
int levelPrint(Tree node)
{
queue<Node *> q;
if (NULL == node)
{
return 0;
}
if (q.empty())
{
q.push(node);
}
int queueSize = q.size();
while (queueSize > 0)
{
cout << "queueSize: " << queueSize << endl;
while (queueSize > 0)
{
Node *pNode = q.front();
q.pop();
cout << pNode->val << " " <<endl;
if (pNode->pLeftChild != NULL)
{
q.push(pNode->pLeftChild);
}
if (pNode->pRigthChild != NULL)
{
q.push(pNode->pRigthChild);
}
--queueSize;
}
queueSize = q.size();
}
return 0;
}
int main(int argc, char const *argv[])
{
Tree node;
createTree(node); //入参是指针引用,仅传指针node还是NULL
levelPrint(node);
return 0;
}
1
2 5
3 4
zjydeMacBook-Pro:~ zjy$ ./tree
123**4**5**
node:1
create new node
create left node
node:2
create new node
create left node
node:3
create new node
create left node
node:*
return end
create right node
node:*
return end
create right node
node:4
create new node
create left node
node:*
return end
create right node
node:*
return end
create right node
node:5
create new node
create left node
node:*
return end
create right node
node:*
return end
node is not NULL
queueSize: 1
1
queueSize: 2
2
5
queueSize: 2
3
4