Bootstrap

C. DS二叉排序树之创建和插入

题目描述

给出一个数据序列,建立二叉排序树,并实现插入功能。

在建立和插入操作后,都输出二叉树的先序遍历结果i

输入

第1行输入n,表示序列包含n个数据

第2行输入n个数据,都是自然数且互不相同,数据之间用空格隔开

第3行输入m,表示要插入m个数据

输入m行,每行一个要插入的数据,都是自然数且和前面的数据不等

输出

第一行输出一开始构建的二叉排序树的先序遍历结果

从第二行起,输出m行,每行输出插入一个数据到二叉排序树后的先序遍历结果

每行输出的遍历结果中,每个数据后面都带一个空格,最后一个数据也带。

输入样例1:

6
22 33 55 66 11 44
3
77
50
10
输出样例1:

22 11 33 55 44 66 
22 11 33 55 44 66 77 
22 11 33 55 44 50 66 77 
22 11 10 33 55 44 50 66 77 

输入样例2:

6
33 55 22 66 11 44
3
25
88
50

输出样例2:

33 22 11 55 44 66 
33 22 11 25 55 44 66 
33 22 11 25 55 44 66 88 
33 22 11 25 55 44 50 66 88 

#include<iostream>
#include<iomanip>
using namespace std;

class bitnode
{
public:
    int data;
    bitnode* left;
    bitnode* right;
    bitnode()
    {
        data=0;
        left=nullptr;
        right=nullptr;
    }
};

class bitree
{
public:
    bitnode* root;
    bitree()
    {
        root=nullptr;
    }
    bitnode* getroot()
    {
        return root;
    }
    void create(int n)
    {
        int num,m;
        while(n--)
        {
            cin>>num;
            Insert(root,num);
        }
        preorder(root);
        cout<<endl;
        cin>>m;
        while(m--)
        {
            cin>>num;
            Insert(root,num);
            preorder(root);
            cout<<endl;
        }
    }
    void Insert(bitnode*& p,int num)
    {
        if(!p)
        {
            p=new bitnode();
            p->data=num;
        }
        else if(num<p->data)
        {
            Insert(p->left,num);
        }
        else
        {
            Insert(p->right,num);
        }
    }
    void preorder(bitnode* p)
    {
        if(p)
        {
            cout<<p->data<<" ";
            preorder(p->left);
            preorder(p->right);
        }
    }
};
int main()
{
    bitree T;
    int n;
    cin>>n;
    T.create(n);
    return 0;
}

;