7-2 二叉树的创建与遍历

7-2 二叉树的创建与遍历 (5 分)
通过带空指针信息的先根序列(亦称先序序列)创建二叉树,并进行先根(先序)、中根(中序)、后根(后序)遍历。二叉树结点数据域值为不等于0的整数(可能是正数也可能是负数),空指针用0表示,例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。

7-2 二叉树的创建与遍历_第1张图片
输入格式:
输入为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列。其中空指针信息用0表示。二叉树结点个数不超过150000,高度不超过6000。输入数据保证二叉树各结点数据值互不相等。

输出格式:
输出为3行整数,每个整数后一个空格。第1行为该二叉树的先根序列,第2行为中根序列,第3行为后根序列。

输入样例:
1 5 8 0 0 0 6 0 0
结尾无空行
输出样例:
1 5 8 6
8 5 1 6
8 5 6 1
结尾无空行

C++(g++)

using namespace std;
#include 
#include
#include 
#include
#include
#include
#include
#include
#include
#include
#include


struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};

TreeNode* build()
{
    TreeNode* root = new TreeNode();
    int v; cin >> v;
    if (!v) {
        root = NULL;
    }
    else
    {
        root->val = v;
        root->left = build();
        root->right = build();
    }
    return root;
}
vector<int>t;
void travel1(TreeNode* root)//前序遍历
{
    if (root)
    {
        t.push_back(root->val);
        travel1(root->left);
        travel1(root->right);
    }
}

vector<int>q;
void travel2(TreeNode* root)//中序遍历
{
    if (root)
    {
        travel2(root->left);
        q.push_back(root->val);
        travel2(root->right);
    }
}

vector<int>p;
void travel3(TreeNode* root)//后序遍历
{
    if (root)
    {
        travel3(root->left);
        travel3(root->right);
        p.push_back(root->val);
    }
}
int main()
{
    TreeNode* root = build();

    travel1(root);
    for (int i = 0; i < t.size(); i++)
    {
        cout << t[i] << " ";
    }
    cout<<endl;
    travel2(root);
    for (int i = 0; i < q.size(); i++)
    {
        cout << q[i] << " ";
    }
    cout<<endl;
    travel3(root);
    for (int i = 0; i < p.size(); i++)
    {
        cout << p[i] << " ";
    }
    cout<<endl;
}

你可能感兴趣的:(数据结构相关习题,图论,算法,c++)