2025 年 3 月青少年软编等考 C 语言七级真题解析
发布时间:2026/10/5 6:31:12 作者:尧图编辑部 阅读量:1,286

目录T1. 树的同构思路分析T2. 网红点打卡攻略思路分析T3. 树的偏斜度思路分析T4. 是不是堆思路分析T1. 树的同构题目链接:SOJ D1399给定两棵树T 1 T_1T1和T 2 T_2T2。如果T 1 T_1T1可以通过若干次左右孩子互换就变成T 2 T_2T2,则我们称两棵树是同构的。例如图 1 给出的两棵树就是同构的,因为我们把其中一棵树的结点A AA、B BB、G GG的左右孩子互换后,就得到另外一棵树。而图 2 就不是同构的。图 1图 2现给定两棵树,请你判断它们是否是同构的。时间限制:1 s内存限制:64 MB输入输入给出2 22棵二叉树的信息。对于每棵树,首先在一行中给出一个非负整数n ( ≤ 10 ) n\ (≤ 10)n(≤10),即该树的结点数(此时假设结点从0 00到n − 1 n -1n−1编号);随后n nn行,第i ii行对应编号第i ii个结点,给出该结点中存储的1 11个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出-。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的。输出如果两棵树是同构的,输出Yes,否则输出No。样例输入 18 A 1 2 B 3 4 C 5 - D - - E 6 - G 7 - F - - H - - 8 G - 4 B 7 6 F - - A 5 1 H - - C 0 - D - - E 2 -样例输出 1Yes样例输入 28 B 5 7 F - - A 0 3 C 6 - H - - D - - G 4 - E 1 - 8 D 6 - B 5 - E - - H - - C 0 2 G - 3 F - - A 1 4样例输出 2No思路分析此题考查树的同构判断,是经典题。在递归遍历的过程中,若两棵树都为空则同构;若一个为空一个非空则不同构;若两棵树的当前子树根节点值不同则不同构。对于两棵树的左右子树,如若对应同构,或者左右子树互换后同构,则整棵子树同构。/* * Name: T1.cpp * Problem: 树的同构 * Author: Teacher Gao. * DateTime: 2026/10/04 14:08 */#includebits/stdc++.husingnamespacestd;structTree{charval;intL,R;}T1[15],T2[15];// 构建树并返回根节点编号intbuildTree(Tree T[]){intn;cinn;vectorboolcheck(n,0);for(inti=0;in;i++){charv,L,R;cinvLR;T[i].val=v;if(L!='-')T[i].L=L-'0',check[T[i].L]=1;elseT[i].L=-1;if(R!='-')T[i].R=R-'0',check[T[i].R]=1;elseT[i].R=-1;}introot=-1;for(inti=0;in;i++){if(check[i]==0){root=i;break;}}returnroot;}// 判断两棵子树是否同构boolisIsomorphic(intr1,intr2){if(r1==-1r2==-1)returntrue;if(r1==-1||r2==-1)returnfalse;if(T1[r1].val!=T2[r2].val)returnfalse;// 情况 A:不交换左右孩子即可同构boolno_swap=isIsomorphic(T1[r1].L,T2[r2