很多题解都来自于我主页关注的一个学姐她写的很简单感谢学姐只是整理自己觉得比较简单的代码不保证考试会有数据错误980: 输出利用先序遍历创建的二叉树的层次遍历序列#includebits/stdc.h using namespace std; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew binode; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } void levelorder(bitree t){ if(tNULL)return ; queuebitreeq; q.push(t); while(!q.empty()){ bitree currentq.front(); q.pop(); if(current!NULL){ coutcurrent-data; if(current-lchild!NULL)q.push(current-lchild); if(current-rchild!NULL)q.push(current-rchild); } } } int main(){ bitree t; createbitree(t); levelorder(t); }981统计利用二叉树存储的森林中树的棵数#includebits/stdc.h using namespace std; typedef struct node { char data; struct node *lchild, *rchild; } *bitree, binode; void createbitree(bitree t) { char ch; cin ch; if (ch #) { t NULL; } else { t new binode; t-data ch; createbitree(t-lchild); createbitree(t-rchild); } } // 统计森林中的树的数量 int countTrees(bitree t) { if (t NULL) return 0; int count 1; // 当前树 // 递归统计右子树中的树的数量 count countTrees(t-rchild); return count; } int main() { bitree t; createbitree(t); cout countTrees(t) endl; return 0; }982: 输出利用二叉树存储的普通树的度#includebits/stdc.h using namespace std; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew node; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } int k1,maxd0; void getdregee(bitree t,int n){ if(t!NULL){ if(t-lchild!NULL)getdregee(t-lchild,n); if(t-rchild!NULL)getdregee(t-rchild,n1); } maxdmax(maxd,n); } int main(){ bitree t; createbitree(t); if(t-rchildNULL){ getdregee(t,k); coutmaxd; } else cout ERROR; return 0; }984: 利用二叉树中序及先序遍历确定该二叉树的后序序列#includebits/stdc.h using namespace std; typedef struct tree { char data; struct tree *lchild, *rchild; } tree; tree* f(const char* fir,const char* mid,int n){ if(n0)return NULL; tree *tnew tree(); t-datafir[0]; const char*pmid; int k0; for(pmid;pmidn;p){ if(*pfir[0])break; k; } t-lchildf(fir1,mid,k); t-rchildf(firk1,p1,n-k-1); return t; } void print(tree* t) { if (t!NULL) { print(t-lchild); print(t-rchild); coutt-data; } } int main(){ char mid[1000],fir[1000]; tree *t; cinmidfir; int nstrlen(mid); tf(fir,mid,n); print(t); return 0; }986: 哈夫曼译码#includebits/stdc.h using namespace std; void pass(string s){ if(s0001)couta; if(s10)coutb; if(s1110)coutc; if(s1111)coutd; if(s110)coute; if(s01)coutf; if(s0000)coutg; if(s001)couth; } int main(){ string a,b; cina; int t0; while(ta.length()){ bba[t]; if(a[t]!b[0]||b.length()4){ pass(b); b.clear(); } t; } return 0; }987: 输出用先序遍历创建的二叉树是否为完全二叉树的判定结果题目描述利用先序递归遍历算法创建二叉树并判断该二叉树是否为完全二叉树。完全二叉树只能是同深度的满二叉树缺少最后一层倒数连续个叶子结点。先序递归遍历建立二叉树的方法为按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符#时表示该结点不需要创建否则创建该结点。最后判断创建完成的二叉树度是否为完全二叉树。需要注意输入数据序列中的#字符和非#字符的序列及个数关系这会最终决定创建的二叉树的形态。输入输入为接受键盘输入的由大写英文字符和#字符构成的一个字符串用于创建对应的二叉树。输出对应的二叉树是否为完全二叉树的判断结果。若是输出Y否则输出N。样例输入A## ABC#### AB##C## ABCD###EF##G### A##B## ABC##D##EG###样例输出Y N Y N Y Y#includebits/stdc.h using namespace std; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew binode; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } bool is(bitree t){ if(tNULL)return 1; queuebitreeq; q.push(t); bool find0; while(!q.empty()){ bitree currentq.front(); q.pop(); if(currentNULL)find1; else{ if(find)return 0; q.push(current-lchild); q.push(current-rchild); } } return 1; } int main(){ bitree t; createbitree(t); if(is(t))coutY; else coutN; return 0; }1010: 折半查找的实现题目描述编写程序实现折半查找算法。输入第一行是查找表的长度n 第二行是查找表中的数据元素 第三行是要查找的数据元素的关键字.输出查找成功返回位序不成功返回-1 ,第二行为比较的次数。样例输入11 5 13 19 21 37 56 64 75 80 88 92 100样例输出-1 4#includebits/stdc.h using namespace std; int a[10001]; void search(int left,int right,int cmp){ int mid,ans0; while(leftright){ ans; midleft(right-left)/2; if(a[mid]cmp)rightmid-1; else if(a[mid]cmp)leftmid1; else{ coutmidendlans; return; } } cout-1endlans; } int main(){ int m,check; cinm; for(int i0;im;i)cina[i]; cincheck; search(0,m-1,check); return 0; }1011: 二叉排序树的实现和查找题目描述按照给定的关键字集合建立二叉排序树。在建立的二叉排序树上查找指定的关键字查找成功输出找到该关键字比较的次数查找不成功输出-1.输入关键字个数n 关键字集合 要查找的关键字输出查找成功输出比较的次数否则输出-1。样例输入12 25 18 46 2 53 39 32 4 74 67 60 11 74样例输出4#includebits/stdc.h using namespace std; typedef struct node{ int data; struct node *lchild,*rchild; }*bitree,binode; void insert(bitree t,int data){ if(tNULL){ t new binode; t-datadata; t-lchildt-rchildNULL; } else if(datat-data)insert(t-lchild,data); else if(datat-data)insert(t-rchild,data); } int search(bitree t,int data){ int count0; while(t!NULL){ count; if(t-datadata)return count; else if(datat-data)tt-lchild; else tt-rchild; } return -1; } int main(){ int n; cinn; bitree tNULL; int data; for(int i0;in;i){ cindata; insert(t,data); } cindata; int resultsearch(t,data); coutresult; return 0; }1012: 哈希表链地址法处理冲突题目描述采用除留余数法Hkeykey %n建立长度为n的哈希表处理冲突用链地址法。建立链表的时候采用尾插法。输入第一行为哈西表的长度m 第二行为关键字的个数n 第三行为关键字集合 第四行为要查找的数据。输出如果查找成功输出该关键字所在哈希表中的地址和比较次数如果查找不成功输出-1。样例输入13 13 16 74 60 43 54 90 46 31 29 88 77 78 79 16样例输出3,1#includebits/stdc.h using namespace std; int main(){ int hash[1000][1000],a[1005]; int m,n; cinmn; for(int i0;in;i){ for(int j0;jn;j)hash[i][j]n1; } for(int i0;in;i){ cina[i]; int pp0; while(hash[a[i]%n][pp]!n1)pp; hash[a[i]%n][pp]a[i]; } int data; cindata; int pos0; while(hash[data%n][pos]!dataposn)pos; if(hash[data%n][pos]data)coutdata%n,pos1; else cout-1; return 0; }1013: 哈希表开放定址法处理冲突题目描述采用除留余数法Hkeykey %n建立长度为n的哈希表处理冲突用开放定址法的线性探测。输入第一行为哈希表的长度n 第二行为关键字的个数 第三行为关键字集合 第三行为要查找的数据。输出如果查找成功输出关键字所哈希表中的地址和比较次数如果查找不成功输出-1。样例输入13 11 16 74 60 43 54 90 46 31 29 88 77 16样例输出3,1#includebits/stdc.h using namespace std; int main(){ int hash[500]{0}; int a[500]; int n,m; cinnm; for(int i0;im;i){ cina[i]; int ppa[i]%n; while(hash[pp]!0pp500)pp; hash[pp]a[i]; } int data; cindata; int tempdata%n; int ans0; while(hash[temp]!0hash[temp]!datatemp500){ temp; ans; } if(hash[temp]data)couttemp,ans1; else cout-1; return 0; }1014: 交换排序算法的设计与实现——冒泡排序题目描述编程实现冒泡排序按照非递减排序测试数据为整数。输入第一行是待排序数据元素的个数 第二行是待排序的数据元素。输出第一行输出第一趟冒泡排序的结果。样例输入10 50 36 41 19 23 4 20 18 12 22样例输出36 41 19 23 4 20 18 12 22 50#includebits/stdc.h using namespace std; int a[1005]; int main(){ int n; cinn; for(int i0;in;i)cina[i]; for(int i0;in-1;i){ if(a[i]a[i1])swap(a[i],a[i1]); } for(int i0;in;i)couta[i] ; return 0; }1015: 堆排序算法题目描述编写程序堆排序算法。按照从小到大的顺序进行排序测试数据为整数。输入第一行是待排序数据元素的个数 第二行是待排序的数据元素。提示用小根堆输出一趟堆排序的结果。样例输入10 50 36 41 19 23 4 20 18 12 22样例输出4 12 20 18 22 41 50 36 19 23#includebits/stdc.h using namespace std; int a[1005]; void adjust(int *a,int root,int n){ int parentroot; int childparent*21; while(childn){ if(child1na[child1]a[child])child; if(a[child]a[parent]){ swap(a[child],a[parent]); parentchild; childparent*21; } else break; } } int main(){ int n; cinn; for(int i0;in;i)cina[i]; for(int i(n-2)/2;i0;i--)adjust(a,i,n); for(int i0;in;i)couta[i] ; return 0; }1016: 插入排序算法实现题目描述插入排序算法实现。输入第一行是待排序数据元素的个数 第二行是待排序的数据元素。输出一趟直接插入排序算法结果。样例输入10 50 36 41 19 23 4 20 18 12 22样例输出36 50 41 19 23 4 20 18 12 22#includebits/stdc.h using namespace std; int main(){ int a[1000],n,temp; cinn; for(int i0;in;i)cina[i]; if(a[0]a[1]){ tempa[1]; a[1]a[0]; a[0]temp; } for(int i0;in;i)couta[i] ; }1053: 输出利用先序遍历创建的二叉树中的指定结点的度题目描述利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的度。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符“#”时表示该结点不需要创建否则创建该结点。最后再输出创建完成的二叉树中的指定结点的度。注意输入数据序列中的字符“#”和非“#”字符的序列及个数关系这会最终决定创建的二叉树的形态。输入输入用例分2行输入第一行接受键盘输入的由大写英文字符和“#”字符构成的一个字符串用于创建对应的二叉树第二行为指定的结点数据。输出用一行输出该用例对应的二叉树中指定结点的度。样例输入A## A ABC#### B样例输出0 1#includebits/stdc.h using namespace std; char a; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew binode; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } int sum0; void f(bitree t){ if(tNULL)return; if(t-dataa){ if(t-lchild!NULL)sum; if(t-rchild!NULL)sum; coutsum; return; } else{ f(t-lchild); f(t-rchild); } } int main(){ bitree t; createbitree(t); getchar(); cina; f(t); return 0; }1055: 邻接矩阵到邻接表题目描述假设无向图G采用邻接矩阵存储编写一个算法输出邻接表。输入第一行为一个整数n表示顶点的个数顶点编号为0到n-1接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接1表示邻接。输出输出图G的邻接表。第一行表示顶点0可直接到达的顶点编号。其他行定义相同。样例输入5 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0样例输出134 023 134 0124 023#includebits/stdc.h using namespace std; int a[100][100]; int main(){ int n; cinn; for(int i0;in;i){ for(int j0;jn;j){ cina[i][j]; } } for(int i0;in;i){ for(int j0;jn;j){ if(a[i][j]1)coutj; } coutendl; } return 0; }1056: 邻接表到邻接矩阵题目描述假设无向图G采用邻接表存储编写一个算法输出邻接矩阵。输入第一行为一个整数n表示顶点的个数顶点编号为0到n-1。第二行表示顶点0可直接到达的顶点编号其他行定义相同。输出输出图G的邻接矩阵。整数矩阵大小为n*n表示图的邻接关系。数字为0表示不邻接1表示邻接。样例输入5 1 3 4 0 2 3 1 3 4 0 1 2 4 0 2 3样例输出01011 10110 01011 11101 10110#includebits/stdc.h using namespace std; int main(){ int n; cinn; int a[105][105]{0}; for(int i0;in;i){ while(1){ char c; cgetchar(); if(c\n)break; else a[i][c-0]1; } } for(int i1;in;i){ for(int j0;jn;j)couta[i][j]; coutendl; } return 0; }1057: 有向图的出度计算题目描述假设有向图G采用邻接表存储设计算法求出图G中每个顶点的出度。输入第一行为图中顶点的个数n 第二行为图的边的条数e 第三行为依附于一条边的两个顶点的数据信息。输出图G中每个顶点的出度。第一行表示顶点0的出度其他行定义相同。样例输入5 6 0 1 0 3 1 2 1 3 4 0 4 3样例输出2 2 0 0 2#includebits/stdc.h using namespace std; vectorinta[105]; int main(){ int n,m; cinnm; for(int i0;im;i){ int x,y; cinxy; a[x].push_back(y); } for(int i0;in;i){ couta[i].size()endl; } return 0; }1060: 无向图的最大度计算题目描述假设无向图G采用邻接矩阵存储求出图G最大度值并输出顶点的编号有多个结果的都要输出。输入第一行为一个整数n表示顶点的个数顶点编号为0到n-1。接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接1表示邻接。输出图G中度的最大值以及顶点编号。第一行表示最大度值第二行表示所有顶点的编号。样例输入5 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 0样例输出4 134#includebits/stdc.h using namespace std; int main(){ int n,ans0; vectorintv[1000]; cinn; for(int i0;in;i){ for(int j0;jn;j){ int x; cinx; if(x1)v[i].push_back(j); } } for(int i0;in;i){ if(v[i].size()ans)ansv[i].size(); } coutansendl; for(int i0;in;i){ if(v[i].size()ans)couti; } }1062: 有向图的边存在判断题目描述假设有向图G采用邻接矩阵存储判断图G中是否存在边。输入第一行第一个整数n表示顶点的个数顶点编号为0到n-1第二行表示顶点i和j接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接1表示不邻接。输出yes存在no不存在。样例输入5 0 2 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0样例输出no#includebits/stdc.h using namespace std; int main(){ int n; cinn; int m,k; cinmk; int found0; int a[1005][1005]; for(int i0;in;i){ for(int j0;jn;j){ cina[i][j]; if(a[i][j]1imjk)found1; } } if(found1)coutyes; else coutno; return 0; }1065: 无向图的连通分量计算题目描述假设无向图G采用邻接矩阵存储编写一个算法求连通分量的个数。输入第一行为一个整数n表示顶点的个数顶点编号为0到n-1接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接1表示不邻接。输出连通分量的个数。样例输入5 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0样例输出1#includebits/stdc.h using namespace std; int n; int b[105]{0}, a[105][105]{0}; int fact(int x){ for(int i0;in;i){ if(b[i]0a[x][i]1){ b[i]1; fact(i); } } } int main(){ cinn; int sum0; for(int i0;in;i){ for(int j0;jn;j){ cina[i][j]; } } for(int i0;in;i){ if(b[i]0){ sum; b[i]1; fact(i); } } coutsum; return 0; }1067: 有向图的邻接表存储强连通判断题目描述假设有向图G采用邻接表存储设计一个算法判断图G是否是强连通图。若是则返回yes否则返回no。图中顶点信息为整型数据。输入第一行为图中顶点的个数n 第二行为图的边的条数e 接下来e行每行是一条边依附的两个顶点信息。输出强连通图输出yes,否则输出no.样例输入5 7 0 1 1 2 1 3 2 3 3 0 3 4 4 0样例输出yes#includebits/stdc.h using namespace std; int main(){ int n,e; cinne; int a[105][105]{0}; int found0; for(int i0;ie;i){ int v1,v2; cinv1v2; a[v1][v2]1; } for(int i0;in;i){ for(int j0;jn;j){ for(int k0;kn;k){ if(a[j][i]1a[i][k]1)a[j][k]1; } } } for(int i0;in;i){ for(int j0;jn;j){ if(a[i][j]!a[j][i])found1; } } if(found1)coutno; else coutyes; return 0; }1068: 图的按录入顺序深度优先搜索题目描述图的深度优先搜索类似于树的先根遍历即从某个结点开始先访问该结点然后深度访问该结点的第一棵子树依次为第二顶子树。如此进行下去直到所有的结点都访问为止。在该题中假定所有的结点以“A”至“Z”中的若干字符表示且要求结点的访问顺序根据录入的顺序进行访问。如果结点录入的顺序为HUEAK从H开始进行深度优先搜索则可能的搜索结果为H-A-K-UE.输入第一行为一个整数n表示顶点的个数第二行为n个大写字母构成的字符串表示顶点接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接否则为相应的边的长度。最后一行为一个字符表示要求进行深度优先搜索的起始顶点。输出用一行输出深度优先搜索结果起始点为给定的顶点。样例输入5 HUEAK 0 0 2 3 0 0 0 0 7 4 2 0 0 0 0 3 7 0 0 1 0 4 0 1 0 H样例输出HEAUK#includebits/stdc.h using namespace std; int a[1005]; vectorintv[105]; void dfs(char ch){ coutch; for(auto i:v[ch]){ if(a[i])continue; a[i]; dfs(i); } } int main(){ int n; char s[105]; cinn; cins; for(int i0;in;i){ for(int j0;jn;j){ int x; cinx; if(x)v[s[i]].push_back(s[j]); } } char ch; cinch; a[ch]; dfs(ch); return 0; }1069: 图的按录入顺序广度优先搜索题目描述图的广度优先搜索类似于树的按层次遍历即从某个结点开始先访问该结点然后访问该结点的所有邻接点再依次访问各邻接点的邻接点。如此进行下去直到所有的结点都访问为止。在该题中假定所有的结点以“A”--“Z”中的若干字符表示且要求结点的访问顺序根据录入的顺序进行访问。如果结点录入的顺序为HUEAK要求从H开始进行广度优先搜索则可能的搜索结果为H-E-A-U-K.输入第一行为一个整数n表示顶点的个数第二行为n个大写字母构成的字符串表示顶点接下来是为一个n*n大小的整数矩阵表示图的邻接关系。数字为0表示不邻接否则为相应的边的长度。最后一行为一个字符表示要求进行广度优先搜索的起始顶点。输出用一行输出广度优先搜索结果起始点为给定的顶点。样例输入5 HUEAK 0 0 2 3 0 0 0 0 7 4 2 0 0 0 0 3 7 0 0 1 0 4 0 1 0 H样例输出HEAUK#includebits/stdc.h using namespace std; int a[1005]; vectorcharv[105]; void dfs(char ch){ queuecharq; q.push(ch); while(q.size()){ char yq.front(); couty; q.pop(); for(auto i:v[y]){ if(a[i])continue; a[i]; q.push(i); } } } int main(){ int n; char s[105]; cinn; cins; for(int i0;in;i){ for(int j0;jn;j){ int x; cinx; if(x)v[s[i]].push_back(s[j]); } } char ch; cinch; a[ch]; dfs(ch); return 0; }1070: 邻接矩阵存储简单路径题目描述假设无向图G采用邻接矩阵存储设计一个算法输出图G中从顶点u到v的所有简单路径。输入简单路径是指路径上的顶点不重复。第一行为一个整数n表示顶点的个数顶点编号为0到n-1第二行表示顶点u和v的编号接下来是为一个n*n大小的矩阵表示图的邻接关系。数字为0表示不邻接1表示不邻接。输出输出图G中从顶点u到v的所有简单路径。样例输入5 0 3 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0样例输出0123 01243 013 03 04213 0423 043#includebits/stdc.h using namespace std; vectorintv[105]; int a[1005],b[1005]; int x,y; void dfs(int x,int num){ if(xy){ for(int i1;inum;i)couta[i]; coutendl; return; } for(auto i:v[x]){ if(b[i])continue; b[i]; a[num]i; dfs(i,num1); b[i]--; } } int main(){ int n; cinn; cinxy; for(int i0;in;i){ for(int j0;jn;j){ int m; cinm; if(m)v[i].push_back(j); } } a[1]x; b[x]; dfs(x,2); return 0; }1076: 判断给定有向图是否存在回路题目描述判断给定有向图是否存在回路。输入第一行为图中顶点的个数n 第二行为途中弧度条数e第三行为顶点信息接着e行为e条弧依附的两个顶点。输出该图是否存在回路是输出yes不是输出no。样例输入4 4 A B C D A B A C B D C D样例输出no#includebits/stdc.h using namespace std; int main(){ queueintque; int n,m; cinnm; char data[100]; for(int i0;in;i)cindata[i]; int indegree[100]{0}; int v[100][100]; while(m--){ char x,y; cinxy; v[x-A][y-A]1; indegree[y-A]; } for(int i0;in;i){ if(!indegree[i])que.push(i); } int count0; while(!que.empty()){ int startque.front(); que.pop(); count; for(int i0;in;i){ if(v[start][i]){ v[start][i]0; indegree[i]--; if(!indegree[i])que.push(i); } } } if(countn)coutno; else coutyes; return 0; }1077: 平衡二叉树的判定题目描述编写程序判断给定的二叉树是否是平衡二叉树。输入二叉树的先序序列。输出如果是平衡二叉树输出yes!否者输出no!样例输入AB##C##样例输出yes!#includebits/stdc.h using namespace std; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew binode; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } int height(bitree t){ if(tNULL)return 0; int lheightheight(t-lchild); int rheightheight(t-rchild); return max(lheight,rheight)1; } bool is(bitree t){ if(tNULL)return true; int lheightheight(t-lchild); int rheightheight(t-rchild); if(abs(lheight-rheight)1)return false; return is(t-lchild)is(t-rchild); } int main(){ bitree t; createbitree(t); if(is(t))coutyes!; else coutno!; return 0; }1098: 堆的判断题目描述编写程序判断以下给出的整数序列是否为最小堆。输入第一行是元素的个数n 第二行是n个整数序列。输出如果是小根堆输出Yes否者输出No。样例输入10 100 86 48 73 35 39 42 57 66 21样例输出No#includebits/stdc.h using namespace std; int main(){ int n; cinn; int a[105]; for(int i1;in;i)cina[i]; int found1; for(int i1;in;i){ int left2 *i; int right2 *i1; if(leftna[i]a[left]){ found0; break; } if(rightna[i]a[right]){ found0; break; } } if(found)coutYes; else coutNo; return 0; }1099: 希尔排序算法实现题目描述编程实现希尔排序算法按照非递减排序测试数据为整数。输入第一行是待排序数据元素的个数n 第二行是待排序的数据元素。输出一趟希尔排序后的结果。样例输入10 50 36 41 19 23 4 20 18 12 22样例输出4 20 18 12 22 50 36 41 19 23#includebits/stdc.h using namespace std; int a[1005]; int main(){ int n,m; cinn; mn/2; for(int i0;in;i)cina[i]; for(int i0;im;i){ if(a[i]a[im])swap(a[i],a[im]); } for(int i0;in;i)couta[i] ; return 0; }1105: 交换二叉树的孩子结点题目描述编程程序实现将二叉树中所有结点的左右孩子互换。输入二叉树的先序序列输入先序序列建立二叉树。输出第一行为交换后的二叉树的中序序列 第二行为交换后的二叉树的先序序列样例输入ABD###C###样例输出CABD ACBD#includebits/stdc.h using namespace std; typedef struct node{ char data; struct node *lchild,*rchild; }*bitree,binode; void createbitree(bitree t){ char ch; cinch; if(ch#)tNULL; else{ tnew binode; t-datach; createbitree(t-lchild); createbitree(t-rchild); } } void swap(bitree t){ if(tNULL)return; binode* tempt-lchild; t-lchildt-rchild; t-rchildtemp; swap(t-lchild); swap(t-rchild); } void inorder(bitree t){ if(tNULL)return; inorder(t-lchild); coutt-data; inorder(t-rchild); } void preorder(bitree t){ if(tNULL)return; coutt-data; preorder(t-lchild); preorder(t-rchild); } int main(){ bitree t; createbitree(t); swap(t); inorder(t); coutendl; preorder(t); return 0; }