按层次遍历二叉树
题目:以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据。
输入格式:
字符串形式的先序序列(即结点的数据类型为单个字符)
输出格式:
按层次遍历二叉树的结果
输入样例:
在这里给出一组输入。例如:
ABDG##HI####CE#J##F##
输出样例:
在这里给出相应的输出。例如:
ABCDEFGHJI
#include <iostream>
#include <queue>
using namespace std;
struct BinaryTree_Node
{
char value; // 节点的值
BinaryTree_Node* lChild; // 左子节点
BinaryTree_Node* rChild; // 右子节点
// 节点的构造函数
BinaryTree_Node() : lChild(NULL), rChild(NULL)
{
}
};
typedef BinaryTree_Node* BT_Node;
// 创建二叉树(先序遍历)
BT_Node CreateBinaryTree()
{
BT_Node root = new BinaryTree_Node();
char v;
cin >> v;
if (v != '#')
{
root->value = v;
root->lChild = CreateBinaryTree();
root->rChild = CreateBinaryTree();
}
else
root = NULL;
return root;
}
// 层次遍历(队列解法)
void Level_traverse(BT_Node root)
{
queue<BT_Node> q;
q.push(root);
while (!q.empty())
{
BT_Node op = q.front();
q.pop();
cout << op->value;
if (op->lChild != NULL)
q.push(op->lChild);
if (op->rChild != NULL)
q.push(op->rChild);
}
}
int main()
{
BT_Node root;
root = CreateBinaryTree();
Level_traverse(root);
}