【时间】2019.09.18
【题目】C++输入二叉树的层序遍历序列,输出其前序遍历序列
代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct TreeNode {
string val;//节点的值
TreeNode* left;
TreeNode* right;
TreeNode(string val) {
this->val = val;
this->left = this->right = NULL;
}
};
void preOrder(TreeNode *root)
{
if (!root)
{
cout << "#" << endl;
return;
}
cout << root->val << endl;
preOrder(root->left);
preOrder(root->right);
}
//TreeNode* iniTree(vector<string> *node_vec)
//{}
int main()
{
//节点i的左子节点是2*i+1,
int n;
cin >> n;
string node_val;
vector<string> node_vec;
for (int i = 0; i < n; i++)
{
cin >> node_val;
node_vec.push_back(node_val);
}
int i = 0;
TreeNode* root = new TreeNode(node_vec[i]);
i++;
vector <TreeNode*> list;
list.push_back(root);
TreeNode *cur;
TreeNode* node;
while (list.size()!=0 && i<=n-1)
{
cur = list[0];
list.erase(list.begin());
if (node_vec[i]=="#")
{
cur->left = NULL;
}
else
{
node = new TreeNode(node_vec[i]);
cur->left = node;
list.push_back(cur->left);
}
if (node_vec[i+1] == "#")
{
cur->right = NULL;
}
else
{
node = new TreeNode(node_vec[i + 1]);
cur->right = node;
list.push_back(cur->right);
}
i=i+2;
}
//遍历二叉树
preOrder(root);
}