#include <iostream>
#include<queue>
using namespace std ;
struct Node{
Node(int p){ var = p ;}
int var ;
Node *left=nullptr ;
Node *right=nullptr;
};
void insertTree(Node**p,int var){ //二重指针是为了在递归中修改left与right的值
if(*p==nullptr){
*p = new Node(var) ;
(*p)->left = nullptr ;
(*p)->right =nullptr ;
}else {
if(var<=(*p)->var) insertTree(&(*p)->left,var);
else insertTree(&(*p)->right,var) ;
}
}
void qianxu(Node *p){
if(p!=nullptr){
cout<<p->var<<" ";
qianxu(p->left);
qianxu(p->right);
}
}
void zhongxu(Node *p) {
if (p!=nullptr) {
zhongxu(p->left);
cout << p->var << " ";
zhongxu(p->right);
}
}
void layer(Node *p) {
queue<Node *> q;
q.push(p);
while (!q.empty()) {
Node *tmp = q.front();
cout << tmp->var << " ";
if (tmp->left != nullptr)
q.push(tmp->left);
if (tmp->right != nullptr)
q.push(tmp->right);
q.pop();
}
}
int main(){
Node *head = nullptr ;
insertTree(&head,3);
insertTree(&head,1);
insertTree(&head,4);
insertTree(&head,6);
insertTree(&head,2);
insertTree(&head,5);
qianxu(head);
cout<<endl;
layer(head);
cout<<endl;
zhongxu(head);
return 1 ;
}