1 #include <iostream>
2 #include <fstream>
3 using namespace std;
4
5 struct Tnode
6 {
7 int data;
8 Tnode *lchil,*rchil;
9 };
10
11 // 向二叉排序树种插入固定值的节点
12 void insert(Tnode**t,int a)
13 {
14 // 如果*t所指为空则进行插入
15 if(*t == NULL)
16 {
17 *t = (Tnode *)malloc(sizeof(Tnode));
18 (*t)->data = a;
19 (*t)->lchil = NULL;
20 (*t)->rchil = NULL;
21 }
22 // 进行判断,是否到达要插入的地方
23 else if((*t)->data > a)
24 {
25 // 插入数小于节点数
26 insert(&(*t)->lchil,a);
27 }
28 else if((*t)->data < a)
29 {
30 // 插入数大于节点数
31 insert(&(*t)->rchil,a);
32 }else
33 {
34 // 插入数等于节点数
35 printf("该节点已存在,请重新选择其他数插入\n");
36 return;
37 }
38 }
39
40 void deletenode(Tnode**t,int key)
41 {
42 if((*t)->data>key)
43 {
44 deletenode(&(*t)->lchil,key);
45 }
46 else if((*t)->data<key)
47 {
48 deletenode(&(*t)->rchil,key);
49 }
50 else if((*t)->data==key)
51 {
52 (*t)=NULL;
53 }
54 }
55
56 int enquiry(Tnode*t,int key)
57 {
58 if(t==NULL)
59 {
60 return 0;
61 }
62 else if(t->data>key)
63 {
64 enquiry(t->lchil,key);
65 }
66 else if(t->data<key)
67 {
68 enquiry(t->rchil,key);
69 }
70 else if(t->data==key)
71 {
72 return 1;
73 }
74 }
75
76 void createBTree(Tnode**t,int nums[],int len)
77 {
78 *t = NULL;
79 for(int i = 0;i < len;i++)
80 {
81 insert(t,nums[i]);
82 }
83 }
84
85 void preorder(Tnode*t)
86 {
87 if(t==NULL)
88 {
89 return;
90 }
91 else
92 {
93 cout<<t->data<<" ";
94 preorder(t->lchil);
95 preorder(t->rchil);
96 }
97 }
98
99 int main()
100 {
101 Tnode* t = NULL;
102 int nums[] = {68 ,50 ,60 ,18 ,88 ,12 ,30 ,70 ,48 ,98 ,76 ,58 ,65};
103 int len = 13;
104 createBTree(&t,nums,len);
105 preorder(t);
106 cout<<endl;
107 int i;
108 cin>>i;
109 int result=enquiry(t,i);
110 if(result==0)
111 {
112 cout<<i<<"不存在";
113 }
114 else
115 {
116 deletenode(&t,i);
117 preorder(t);
118 }
119 }