//二叉排序树(二叉搜索树,二叉查找树)
//二叉树-》》》》bst
//1,对于一个节点,如果他有左子树,左子树都比他小
//2.对于右子树,右子树都比他大
#include
using namespace std;
template
class treesort
{
private:
struct node
{
T data;
node *left;
node *right;
};
node *root;
public:
treesort(T dataroot)
{
auto temp=new node;
temp->data=dataroot;
root=temp;
root->left=nullptr;
root->right=nullptr;
}
node* find(node *root,T x)
{
if(root==nullptr)
return root;
if(root->data==x)
{
return root;
}
if(x<root->data)
{
return find(root->left,x);
}
if(x>root->data)
{
return find(root->right,x);
}
return nullptr;
}
void insert(T dataa)
{
node** cur = &root; // 从根指针的地址开始
while (*cur != nullptr)
{
if (dataa == (*cur)->data)
return; // 已存在,不插入
else if (dataa < (*cur)->data)
cur = &((*cur)->left);
else
cur = &((*cur)->right);
}
// 此时 *cur 正好是父节点中指向该空位的指针(左或右)
*cur = new node{dataa, nullptr, nullptr};
}
void print(node* root)
{
if(root==nullptr)
return;
if(root->left!=nullptr)
print(root->left);
cout<<root->data<<" ";
if(root->right!=nullptr)
print(root->right);
}
node* getroot()
{
return root;
}
};
int main()
{
int as;
cin>>as;
treesort run(as);
int n;
cin>>n;
while(n--)
{
int k;
cin>>k;
run.insert(k);
}
run.print(run.getroot());
return 0;
}