#include <stdio.h> #include<iostream> #include <string.h> #include <string> #include <cstdio> #include <algorithm> #include <vector> using namespace std; void rebuild(int mid[],int back[],int l1,int r1, int l2,int r2){ //输出根节点 cout<<back[r2]<<" "; //停止条件,如果只剩一个元素就结束 if(l1-r1==0) return; //找到根节点位置 int point1=-1; for(int i=l1;i<=r1;i++){ if(back[r2]==mid[i]){ point1=i; } } //有左子树 if(point1-1>=0) { int l2_new = -1; int r2_new = -1; for (int i = l2; i <= r2; i++) { if (back[i] == mid[l1]) { l2_new = i; } if (back[i] == mid[point1 - 1]) { r2_new = i; } } rebuild(mid, back, l1, point1 - 1, l2_new, r2_new); } //有右子树 if(mid[point1+1]>0) { int l2_new = -1; int r2_new = -1; for (int i = l2; i <= r2; i++) { if (back[i] == mid[point1 + 1]) { l2_new = i; } if (back[i] == mid[r2]) { r2_new = i; } } rebuild(mid, back, point1 + 1, r2, l2_new, r2_new); } } int main() { int i=0; int mid[65536]; int back[65536]; while(cin>>mid[i++]) { if(cin.get() != ' ') break; } i=0; while(cin>>back[i++]) { if(cin.get() != ' ') break; } rebuild(mid,back,0,i-1,0,i-1); return 0; }这段代码每一行的注释
时间: 2024-02-14 07:19:51 浏览: 82
#include <stdio.h>
#include<iostream>
#include <string.h>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
void rebuild(int mid[],int back[],int l1,int r1, int l2,int r2){
//输出根节点
cout<<back[r2]<<" ";
//停止条件,如果只剩一个元素就结束
if(l1-r1==0)
return;
//找到根节点位置
int point1=-1;
for(int i=l1;i<=r1;i++){
if(back[r2]==mid[i]){
point1=i;
}
}
//有左子树
if(point1-1>=0) {
int l2_new = -1;
int r2_new = -1;
for (int i = l2; i <= r2; i++) {
if (back[i] == mid[l1]) {
l2_new = i;
}
if (back[i] == mid[point1 - 1]) {
r2_new = i;
}
}
rebuild(mid, back, l1, point1 - 1, l2_new, r2_new);
}
//有右子树
if(mid[point1+1]>0) {
int l2_new = -1;
int r2_new = -1;
for (int i = l2; i <= r2; i++) {
if (back[i] == mid[point1 + 1]) {
l2_new = i;
}
if (back[i] == mid[r2]) {
r2_new = i;
}
}
rebuild(mid, back, point1 + 1, r2, l2_new, r2_new);
}
}
int main() {
int i=0;
int mid[65536];
int back[65536];
while(cin>>mid[i++])
{
if(cin.get() != ' ') break;
}
i=0;
while(cin>>back[i++])
{
if(cin.get() != ' ') break;
}
rebuild(mid,back,0,i-1,0,i-1);
return 0;
}
每一行的注释:
- 第1行:包含标准输入输出库的头文件。
- 第2行:包含iostream库的头文件。
- 第3行:包含字符串操作库的头文件。
- 第4行:包含string库的头文件。
- 第5行:包含标准输入输出库的头文件。
- 第6行:包含算法库的头文件。
- 第7行:包含向量库的头文件。
- 第9行:命名空间std的开始。
- 第11行:定义函数rebuild,参数为mid、back、l1、r1、l2、r2。
- 第14行:输出根节点。
- 第16-18行:判断是否只剩一个元素,是则结束。
- 第21-25行:找到根节点位置。
- 第28-47行:处理左子树。
- 第30-32行:判断是否有左子树。
- 第34-36行:找到新的l2和r2。
- 第38行:递归调用rebuild函数。
- 第43-61行:处理右子树。
- 第45-47行:判断是否有右子树。
- 第49-51行:找到新的l2和r2。
- 第53行:递归调用rebuild函数。
- 第64行:主函数的开始。
- 第66行:定义变量i并初始化为0。
- 第67行:定义数组mid并初始化为空。
- 第68行:定义数组back并初始化为空。
- 第69-72行:读入mid数组的元素。
- 第73-76行:读入back数组的元素。
- 第78行:调用rebuild函数。
- 第80行:返回0,结束程序。
阅读全文