题目描述
给出一个数据序列,建立二叉排序树,并实现插入功能。
在建立和插入操作后,都输出二叉树的先序遍历结果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;
}