1 #include <iostream>
2 using namespace std;
3 typedef struct node
4 {
5 int value;
6 node *lchild,*rchild;
7 }*bitree,binode;
8 /*寻找要插入的双亲结点*/
9 bool searchBSD(bitree root,int data,bitree f,bitree &p) /*传引用,f为双亲结点*/
10 {
11 if(!root)
12 {
13 p=f;
14 return false;
15 }
16 else if(root->value==data)
17 {
18 p=root;
19 return false;
20 }
21 else if(data<root->value)
22 return searchBSD(root->lchild,data,root,p);
23 else
24 return searchBSD(root->rchild,data,root,p);
25 }
26 void InsertBST(bitree &root,int data) /*结点插入*/
27 {
28 bitree p,temp; /*p为被插入的结点,temp为即将插入的结点*/
29 if(!searchBSD(root,data,NULL,p))
30 {
31 temp=new binode;
32 temp->value=data;
33 temp->rchild=temp->lchild=NULL;
34 if(p==NULL)
35 root=temp;
36 else if(p->value>data)
37 p->lchild=temp;
38 else
39 p->rchild=temp;
40 }
41 }
42 void InOrderTraverse(bitree root) /*中序遍历二叉搜索树*/
43 {
44 if(root)
45 {
46 InOrderTraverse(root->lchild);
47 cout<<root->value<<" ";
48 InOrderTraverse(root->rchild);
49 }
50 }
51 int main(int argc, char const *argv[])
52 {
53 bitree root;
54 int n;
55 int a[100];
56 while(cin>>n)
57 {
58 root=NULL;
59 for(int i=0;i<n;i++)
60 {
61 cin>>a[i];
62 InsertBST(root,a[i]);
63 }
64 InOrderTraverse(root);
65 }
66
67 return 0;
68 }