1 | //第一题 |
2 | /*这道题主要考的是n0与n2之间的关系 |
3 | 只要知道三个式子就行 |
4 | n=n0+n1+n2 |
5 | e=n1+2*n2 |
6 | n=e+1 |
7 | 就可以解出n2=n0-1*/ |
8 | #include<bits/stdc++.h> |
9 | using namespace std; |
10 | int main() |
11 | { |
12 | int n0; |
13 | cin>>n0; |
14 | int n2=n0-1; |
15 | cout<<n2; |
16 | } |
17 | /*第二题 |
18 | 这个就是课上讲的最大值与最小值,就是全满和只有一条线 |
19 | 全满就是一个个2的平方相加*/ |
20 | #include<bits/stdc++.h> |
21 | using namespace std; |
22 | int main() |
23 | { |
24 | int h; |
25 | cin>>h; |
26 | int ans=0; |
27 | for(int i=0;i<h-1;i++) |
28 | { |
29 | |
30 | ans+=pow(2,i); |
31 | } |
32 | if(h==1) |
33 | cout<<"1"<<" "<<"1"; |
34 | else |
35 | { |
36 | cout<<h<<" "<<ans+pow(2,h-1); |
37 | } |
38 | |
39 | } |
40 | /*第三题 |
41 | 这道题跟第二题异曲同工,除了特殊的例子1之外,就是最大值的情况*/ |
42 | #include<bits/stdc++.h> |
43 | using namespace std; |
44 | int main() |
45 | { |
46 | int h,n; |
47 | while(cin>>h>>n) |
48 | { |
49 | int ans=0; |
50 | for(int i=0;i<=h-1;i++) |
51 | ans+=pow(2,i); |
52 | if(h==1) |
53 | { |
54 | if(n==1) |
55 | cout<<"YES"<<endl; |
56 | else |
57 | { |
58 | cout<<"NO"<<endl; |
59 | } |
60 | |
61 | } |
62 | else |
63 | { |
64 | if(n==ans) |
65 | cout<<"YES"<<endl; |
66 | else |
67 | { |
68 | cout<<"NO"<<endl; |
69 | } |
70 | |
71 | } |
72 | |
73 | } |
74 | } |
75 | /*第四题 |
76 | 这道题是层次遍历的排序,将二叉树存在一个数组里,子为n*2+1和*n*2+2,父就反过来就可以*/ |
77 | #include<bits/stdc++.h> |
78 | using namespace std; |
79 | int main() |
80 | { |
81 | int n; |
82 | while(cin>>n) |
83 | { |
84 | int f,z1,z2; |
85 | f=(n-1)/2; |
86 | z1=n*2+1; |
87 | z2=n*2+2; |
88 | if(n==0) |
89 | cout<<"-1"<<" "<<"1"<<" "<<"2"<<endl; |
90 | else |
91 | { |
92 | cout<<f<<" "<<z1<<" "<<z2<<endl; |
93 | } |
94 | |
95 | } |
96 | } |
97 | /*第五题动用了真正的二叉树结构体 |
98 | 主要有用的就是Depth函数,其实就是遍历,一直左遍历,一直右遍历,取最大值*/ |
99 | #include<bits/stdc++.h> |
100 | using namespace std; |
101 | typedef struct BiNode |
102 | { |
103 | char data; |
104 | BiNode *lchild ,*rchild; |
105 | }*BiTree; |
106 | void createBiTree(BiTree &T) |
107 | { |
108 | char ch; |
109 | cin>>ch; |
110 | if(ch=='#') |
111 | T=nullptr; |
112 | else |
113 | { |
114 | T=new BiNode; |
115 | T->data=ch; |
116 | createBiTree(T->lchild); |
117 | createBiTree(T->rchild); |
118 | } |
119 | |
120 | |
121 | } |
122 | int Depth(BiTree &T) |
123 | { |
124 | int m,n; |
125 | if(T==nullptr) |
126 | return 0; |
127 | else |
128 | { |
129 | m=Depth(T->lchild); |
130 | n=Depth(T->rchild); |
131 | if(m>n) |
132 | return m+1; |
133 | else |
134 | { |
135 | return n+1; |
136 | } |
137 | |
138 | } |
139 | |
140 | } |
141 | int main() |
142 | { |
143 | int n; |
144 | cin>>n; |
145 | for(int i=0;i<n;i++) |
146 | { |
147 | BiTree T; |
148 | createBiTree(T); |
149 | cout<<Depth(T)<<endl; |
150 | } |
151 | } |
152 | /*这道题最重要的就是中,后,层次 |
153 | 中:左 ,根,右依次输出 |
154 | 后;左右根依次输出 |
155 | 层次;遍历队列,对头出队,左右入队*/ |
156 | #include<bits/stdc++.h> |
157 | using namespace std; |
158 | char c; |
159 | typedef struct BiNode |
160 | { |
161 | char data; |
162 | BiNode *lchild ,*rchild; |
163 | }*BiTree; |
164 | void createBiTree(BiTree &T,int flag) |
165 | { |
166 | |
167 | if(flag) |
168 | cin>>c; |
169 | else |
170 | { |
171 | flag=1; |
172 | } |
173 | if(c=='\n') |
174 | return; |
175 | |
176 | |
177 | |
178 | |
179 | else |
180 | { |
181 | |
182 | |
183 | |
184 | if(c=='#') |
185 | T=nullptr; |
186 | else |
187 | { |
188 | |
189 | T=new BiNode; |
190 | T->data=c; |
191 | createBiTree(T->lchild,flag); |
192 | createBiTree(T->rchild,flag); |
193 | |
194 | |
195 | } |
196 | } |
197 | |
198 | } |
199 | void visit(BiTree &T) |
200 | { |
201 | if(T->data!='#') |
202 | cout<<T->data; |
203 | } |
204 | void inorder(BiTree T) |
205 | { |
206 | if(T!=NULL) |
207 | { |
208 | inorder(T->lchild); |
209 | visit(T); |
210 | inorder(T->rchild); |
211 | } |
212 | } |
213 | void postorder(BiTree T) |
214 | { |
215 | if(T!=nullptr) |
216 | { |
217 | postorder(T->lchild); |
218 | postorder(T->rchild); |
219 | visit(T); |
220 | |
221 | } |
222 | } |
223 | void Leaveorder(BiTree T) |
224 | { |
225 | BiTree p=T; |
226 | if(T==nullptr) |
227 | return ; |
228 | queue<BiTree>q; |
229 | q.push(p); |
230 | while(!q.empty()) |
231 | { |
232 | p=q.front(); |
233 | cout<<p->data; |
234 | q.pop(); |
235 | if(p->lchild!=nullptr) |
236 | q.push(p->lchild); |
237 | if(p->rchild!=nullptr) |
238 | q.push(p->rchild); |
239 | } |
240 | } |
241 | |
242 | int Depth(BiTree &T) |
243 | { |
244 | int m,n; |
245 | if(T==nullptr) |
246 | return 0; |
247 | else |
248 | { |
249 | m=Depth(T->lchild); |
250 | n=Depth(T->rchild); |
251 | if(m>n) |
252 | return m+1; |
253 | else |
254 | { |
255 | return n+1; |
256 | } |
257 | |
258 | } |
259 | |
260 | } |
261 | int main() |
262 | { |
263 | |
264 | while(cin>>c) |
265 | { |
266 | |
267 | int flag=0; |
268 | BiTree T; |
269 | if(c=='#') |
270 | cout<<" "<<endl; |
271 | else |
272 | { |
273 | createBiTree(T,flag); |
274 | inorder(T); |
275 | cout<<" "; |
276 | postorder(T); |
277 | cout<<" "; |
278 | Leaveorder(T); |
279 | cout<<endl; |
280 | } |
281 | getchar(); |
282 | |
283 | } |
284 | } |
285 | /*第七题 |
286 | 这道题就是假设都只有左子树 |
287 | 一个个赋予位置在输出就行了*/ |
288 | void ManuallyCreateTree(BiTree &T) |
289 | { |
290 | T=new BiNode; |
291 | T->data='a'; |
292 | BiNode *n1=new BiNode; |
293 | n1->data='b'; |
294 | BiNode *n2=new BiNode; |
295 | n2->data='c'; |
296 | BiNode *n3=new BiNode; |
297 | n3->data='d'; |
298 | BiNode *n4=new BiNode; |
299 | n4->data='e'; |
300 | BiNode *n5=new BiNode; |
301 | n5->data='f'; |
302 | T->lchild=n1,T->rchild=n4; |
303 | n1->lchild=n3,n1->rchild=n2; |
304 | n2->lchild=nullptr,n2->rchild=nullptr; |
305 | n3->lchild=nullptr,n3->rchild=nullptr; |
306 | n4->rchild=n5,n4->lchild=nullptr; |
307 | n5->lchild=nullptr,n5->rchild=nullptr; |
308 | |
309 | } |
310 |
二叉树题解
最新推荐文章于 2024-07-11 13:30:38 发布