算法题目及答案
- 格式:docx
- 大小:29.23 KB
- 文档页数:11
算法练习题及答案算法练习题及答案随着计算机科学的发展,算法成为了计算机科学的核心内容之一。
算法是一种解决问题的方法和步骤,它可以将复杂的问题简化为一系列简单的操作。
为了提高算法设计和分析的能力,许多学生和程序员经常进行算法练习。
在这篇文章中,我将给出一些常见的算法练习题及其答案,希望能对读者有所帮助。
1. 反转字符串题目:给定一个字符串,将其反转并返回。
解答:可以使用两个指针,一个指向字符串的开头,一个指向字符串的末尾。
然后交换两个指针指向的字符,然后分别向中间靠拢,直到两个指针相遇。
2. 判断回文数题目:给定一个整数,判断它是否是回文数。
回文数是指正序和倒序读都一样的整数。
解答:可以将整数转换为字符串,然后使用反转字符串的方法判断是否相等。
另一种方法是将整数反转后与原来的整数进行比较。
3. 寻找两个有序数组的中位数题目:给定两个有序数组,找出这两个数组合并后的中位数。
要求时间复杂度为O(log(m+n))。
解答:可以使用二分查找的思想。
首先将两个数组合并成一个有序数组,然后找到中位数的位置。
如果数组长度为奇数,中位数就是中间的元素;如果数组长度为偶数,中位数就是中间两个元素的平均值。
4. 搜索旋转排序数组题目:给定一个按照升序排列的整数数组,经过旋转后的数组,搜索一个给定的目标值。
如果目标值存在于数组中,则返回它的索引,否则返回-1。
解答:可以使用二分查找的思想。
首先找到数组的中间元素,然后判断中间元素与目标值的关系。
如果中间元素等于目标值,直接返回索引;如果中间元素小于目标值,说明目标值在右半部分,继续在右半部分进行二分查找;如果中间元素大于目标值,说明目标值在左半部分,继续在左半部分进行二分查找。
5. 最长公共前缀题目:给定一个字符串数组,找到这些字符串的最长公共前缀。
解答:可以将第一个字符串作为初始的最长公共前缀,然后逐个比较后面的字符串与最长公共前缀的相同部分。
如果相同部分为空,则返回空;如果相同部分不为空,则更新最长公共前缀。
2023高中信息技术学考算法设计操作题(6
套含答案)
简介
本文档提供了2023年高中信息技术学考试的算法设计操作题,共6套,并附带答案。
第一套算法设计操作题
题目:请设计一个算法,对给定的整数数组进行排序,并输出
排序后的结果。
答案:使用快速排序算法对整数数组进行排序。
第二套算法设计操作题
题目:请设计一个算法,统计一个字符串中每个字符出现的次数,并输出结果。
答案:使用哈希表存储每个字符出现的次数,并遍历字符串统计。
第三套算法设计操作题
题目:请设计一个算法,判断一个给定的字符串是否为回文字
符串。
答案:将字符串反转后与原字符串进行比较,如果相等则为回
文字符串。
第四套算法设计操作题
题目:请设计一个算法,计算给定的整数数组中的最大值和最
小值,并输出结果。
答案:遍历整数数组,使用两个变量分别记录最大值和最小值,不断更新这两个变量的值。
第五套算法设计操作题
题目:请设计一个算法,找出给定整数数组中的两个数,使它
们的和等于给定的目标值。
答案:使用哈希表存储数组元素及其索引,遍历数组并查找目
标值减去当前元素的差是否在哈希表中。
第六套算法设计操作题
题目:请设计一个算法,统计一个给定字符串中的单词个数,并输出结果。
答案:使用字符串分割函数将字符串分割成单词数组,然后统计数组的长度即可。
以上是2023年高中信息技术学考试的6套算法设计操作题及其答案。
一、选择题1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法4、在下列算法中有时找不到问题解的是( B )。
A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法5. 回溯法解旅行售货员问题时的解空间树是( A )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法7、衡量一个算法好坏的标准是( C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短8、以下不可以使用分治法求解的是( D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题9. 实现循环赛日程表利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法10、下列随机算法中运行时有时候成功有时候失败的是( C )A 数值概率算法B 舍伍德算法C 拉斯维加斯算法D 蒙特卡罗算法11.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法B、动态规划法C、贪心法D、回溯法13.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)15.分支限界法解最大团问题时,活结点表的组织形式是( B )。
A、最小堆B、最大堆C、栈D、数组16.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法17.实现棋盘覆盖算法利用的算法是( A )。
C语言经典算法题目及答案题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k)printf("%d,%d,%d\n",i,j,k);}}====================================== ========================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}====================================== ========================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
软考算法题库及答案详解1. 题目:给定一个整数数组,找出其中的最大值。
答案:使用线性搜索算法遍历数组中的每个元素,记录并更新最大值。
2. 题目:实现一个函数,判断一个链表是否为回文结构。
答案:首先将链表复制到数组中,然后使用双指针方法从两端向中间遍历,判断是否相等。
3. 题目:编写一个算法,计算两个字符串的最长公共子序列长度。
答案:使用动态规划方法,创建一个二维数组dp,其中dp[i][j]表示字符串1的前i个字符和字符串2的前j个字符的最长公共子序列长度。
遍历两个字符串,更新dp数组。
4. 题目:给定一个无序数组,找出其中第k大的元素。
答案:使用快速选择算法,通过随机选择一个元素作为基准,将数组分为两部分,一部分包含比基准小的元素,另一部分包含比基准大的元素。
根据k的值确定是否继续在左部分或右部分进行快速选择。
5. 题目:实现一个算法,将一个字符串反转。
答案:使用双指针方法,一个指针从字符串的开始位置,另一个指针从字符串的结束位置,逐个交换两个指针所指的字符。
6. 题目:给定一个整数n,打印所有可能的n位二进制数。
答案:使用回溯算法,从最低位开始,依次尝试0和1,直到达到n位。
7. 题目:编写一个函数,实现二分查找。
答案:首先确定数组是有序的,然后设置两个指针low和high分别指向数组的开始和结束。
计算中间位置mid,比较中间元素与目标值,如果相等则返回mid,如果目标值小于中间元素,则在左半部分继续查找,否则在右半部分继续查找。
8. 题目:给定一个二维矩阵,找出其中的最大值。
答案:遍历矩阵的每一行,记录每行的最大值,然后从这些行的最大值中找出整个矩阵的最大值。
9. 题目:实现一个算法,将一个栈转换为队列。
答案:使用两个栈,将原栈的所有元素依次压入第一个栈,然后依次将第一个栈的元素压入第二个栈,这样第二个栈就实现了队列的先进先出特性。
10. 题目:编写一个算法,实现归并排序。
答案:将数组分成两部分,直到每部分只有一个元素,然后递归地合并这些元素,直到整个数组被排序。
python算法题目100及最佳答案Python算法题目100及最佳答案Python作为一门高效、简洁的编程语言,自然也有着强大的算法处理能力。
以下是Python算法题目100及其最佳答案,供大家练习和参考。
1. 输入一个数字n,计算并输出1到n的所有数字的和。
```pythondef sum(n):return (n*(n+1))/2```2. 输入一个数字n,计算并输出1到n的所有数字的平方和。
```pythondef square_sum(n):return (n*(n+1)*(2*n+1))/6```3. 输入一个数字n,判断其是否为质数。
```pythondef is_prime(n):if n<=1:return Falsefor i in range(2, int(n/2)+1):if n%i == 0:return Falsereturn True```4. 输入一个数字n,输出其所有的质因数。
```pythondef prime_factors(n):factors = []d = 2while d*d <= n:while (n % d) == 0:factors.append(d)n //= dd += 1if n > 1:factors.append(n)return factors```5. 输入一个字符串,判断其是否是回文字符串。
```pythondef is_palindrome(s):s = s.lower().replace(' ','')return s == s[::-1]```6. 输入一个序列,判断其是否是有序的。
```pythondef is_sorted(seq):for i in range(len(seq)-1):if seq[i+1] < seq[i]:return Falsereturn True```7. 输入两个有序序列,将其合并成一个有序的序列并输出。
程序员! 10至100 乘算法题许多程序员在他们的工作生涯中都会遇到编程中的数学问题,其中乘法运算是最常见的一种。
本文旨在为程序员提供10至100的乘算法题答案,以帮助他们更好地完成工作任务。
乘法运算是数学中最常见的运算,在编程中也是处理不同类型数据的基本操作之一。
为了让程序员更好地理解乘法运算,本文将为他们提供从10到100的乘法题目,以供参考。
1. 10乘10等于多少?答案:10乘10等于100。
2. 20乘20等于多少?答案:20乘20等于400。
3. 30乘30等于多少?答案:30乘30等于900。
4. 40乘40等于多少?答案:40乘40等于1600。
5. 50乘50等于多少?答案:50乘50等于2500。
6. 60乘60等于多少?答案:60乘60等于3600。
7. 70乘70等于多少?答案:70乘70等于4900。
8. 80乘80等于多少?答案:80乘80等于6400。
9. 90乘90等于多少?答案:90乘90等于8100。
10. 100乘100等于多少?答案:100乘100等于10000。
以上是本文提供的10至100乘算法题的答案,希望能够帮助程序员更好地理解乘法运算。
除此之外,程序员还应当注意,在乘法运算时必须要确保所有数值都是正确的,如果数值有误可能会导致程序出错。
如果发现输入的数值有误,应立即更正。
此外,理解乘法运算的基础在于乘数与被乘数的概念,因此,程序员还应当努力学习乘数与被乘数的概念。
乘算法可以用来解决许多实际问题,即使是一些比较复杂的问题,也可以使用乘算法来解决。
此外,乘法运算也常用于编程中,所以程序员应该熟悉其相关的理论和操作。
通过本文提供的乘算法题,程序员可以加深对乘法运算的理解,从而使自己在编程时遇到乘法问题时更加轻松地处理它们。
算法题目及答案【篇一:算法考试试题及答案】s=txt>1、算法的复杂性是的度量,是评价算法优劣的重要依据。
程序段的时间复杂度为。
i=1; k=0;while(in) { k=k+10*i;i++; }3、计算机的资源最重要的是和资源。
因而,算法的复杂性有和之分。
5、递归是指函数或者通过一些语句调用自身。
6、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相且与原问题相同。
二、选择题(本题20分,每小题2分)1、分支限界法与回溯法都是在问题的解空间树t上搜索问题的解,二者( )。
a.求解目标不同,搜索方式相同b.求解目标不同,搜索方式也不同c.求解目标相同,搜索方式不同d.求解目标相同,搜索方式也相同2、回溯法在解空间树t上的搜索方式是( )。
a.深度优先b.广度优先c.最小耗费优先d.活结点优先3、在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( )。
a.回溯法b.分支限界法c.回溯法和分支限界法d.回溯法求解子集树问题4、以下关于判定问题难易处理的叙述中正确的是( )。
a.可以由多项式时间算法求解的问题是难处理的b.需要超过多项式时间算法求解的问题是易处理的c.可以由多项式时间算法求解的问题是易处理的d.需要超过多项式时间算法求解的问题是不能处理的5、设f(n),g(n)是定义在正数集上的正函数,如果存在正的常数c和自然数n0,使得当n≥n0时有f(n)≤cg(n),则称函数f(n)当n充分大时有上界g(n),记作f(n)=o(g(n)),即f(n)的阶( )g(n)的阶。
a.不高于b.不低于c.等价于d.逼近6、对于含有n个元素的子集树问题,最坏情况下其解空间的叶结点数目为( )。
a.n!b.2c.2-1d. 2-17、程序可以不满足以下( )特征a.输入b.输出c.确定性d.有限性8、以下( )不能在线性时间完成排序a.计数排序b.基数排序c.堆排序d.桶排序9、以下( )不一定得到问题的最优解a.贪心算法b.回溯算法c.分支限界法d.动态规划法10、以下()不包括在图灵机结构中 nn+1na. 控制器b. 读写磁头c.计算器d. 磁带三、简答题(本题20分,每小题5分)1、设有n=2个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③循环赛要在最短时间内完成。
高二数学算法案例试题答案及解析1. 两个二进制数101(2)与110(2)的和用十进制数表示为( ) A .12 B .11 C .10D .9【答案】B【解析】101(2)=22+0×21+1×20=5,110(2)=1×22+1×21+0×20=6. 【考点】二进制数与十进制数的互相转化.2. 用辗转相除法求294和84的最大公约数时,需要做除法的次数是 A .1 B .2 C .3D .4【答案】B【解析】由辗转相除法可知:,所以需要做除法的次数是2.【考点】算法的应用.3. 将十进制数102转化为三进制数结果为:【答案】10210.【解析】将十进制数转化为3进制数的方法为除3取余法,再把各步所得的余数从下到上排列即得10210.【考点】算法的应用.4. 设、、为整数(),若和被除得的余数相同,则称和对模同余,记为()。
已知,则的值可以是( ) A .2015 B .2011 C .2008 D .2006【答案】B 【解析】因为的余数为1, 的值可以是2011,故选B. 【考点】新定义的应用点评:主要是理解同余的概念,然后借助于二项式定理来得到结论,属于基础题。
5. (本题满分12分)将101111011(2)转化为十进制的数; 【答案】379【解析】解: 101111011(2)=1×28+0×27+1×26+1×25+1×24+1×23+0×22+1×21+1=379. 【考点】本试题考查了进位制的转换运算。
点评:将k 进位制转化内十进制,只要将各个数位上的数乘以k 的次幂即可,注意n 位数的最好次幂为n-1次幂,然后依次类推相加得到结论。
属于基础题。
6. 阅读上图的程序框图, 若输出的值等于,那么在程序框图中的判断框内应填写的条件是( )A.?B.?C.?D.?【答案】A【解析】第一次循环:S=1+1=2,i=2,不满足条件,执行循环;第二次循环:S=2+2=4,i=3,不满足条件,执行循环;第三次循环:S=4+3=7,i=4,不满足条件,执行循环;第四次循环:S=7+4=11,i=5,不满足条件,执行循环;第五次循环:S=11+5=16,i=6,满足条件,退出循环体,输出S=16,故判定框中应填i>5或i≥6,故选:A。
常见算法面试题及答案算法面试是程序员求职过程中的重要环节之一。
面试官会通过提问算法问题来评估面试者的思维能力、解决问题的能力以及编程技巧。
在准备算法面试的过程中,了解常见的算法面试题并熟悉相应的解答方法是非常重要的。
本篇文章将介绍一些常见的算法面试题及其答案,帮助读者更好地准备算法面试。
1. 两数之和题目描述:给定一个整数数组和一个目标值,判断数组中是否存在两个数之和等于目标值。
若存在,返回这两个数的索引,若不存在,返回空。
解答方法:使用哈希表来记录数组元素和索引的对应关系。
遍历数组,对于每个元素,判断目标值与当前元素的差值是否在哈希表中存在,如果存在则返回对应的索引;如果不存在,则将当前元素及其索引插入哈希表中。
当遍历结束后仍未找到满足条件的两个数,返回空。
2. 反转字符串题目描述:给定一个字符串,将其按照单词顺序进行反转。
解答方法:首先,将整个字符串进行反转,得到一个逆序的字符串。
然后,再将逆序字符串中的每个单词进行反转。
最后得到的字符串即为所求结果。
3. 链表是否存在环题目描述:给定一个链表,判断链表中是否存在环。
解答方法:使用快慢指针的方法来判断链表是否存在环。
快指针每次移动两步,慢指针每次移动一步。
如果链表中存在环,那么快指针和慢指针一定会在某个节点相遇;如果链表中不存在环,快指针将会先到达链表的末尾。
根据快慢指针的移动情况,可以判断链表是否存在环。
4. 二叉树的最大深度题目描述:给定一个二叉树,找出其最大深度。
解答方法:使用递归的方法来计算二叉树的最大深度。
从根节点开始,递归地计算左子树和右子树的最大深度,然后取二者中的较大值加上1即为整个二叉树的最大深度。
5. 最长连续递增序列题目描述:给定一个未经排序的整数数组,找到最长连续递增序列的长度。
解答方法:遍历数组,对于每个元素,若与前一个元素递增,则将连续递增序列长度加1,否则重新计算连续递增序列的长度。
在遍历过程中,记录最长的连续递增序列长度,并返回结果。
根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。
要求新生成的链表中不允许有重复元素。
算法如下ListNode * Merge ( ListNode * L1, ListNode * L2 ){//根据两个带表头结点的有序单链表L1和L2, 生成一个新的有序单链表ListNode *first = new ListNode;ListNode *p1 = L1->link, *p2 = L2->link, *p = first, *q;while ( p1 != NULL && p2 != NULL ){q = new ListNode;if ( p1->data == p2->data ){ q->data = p1->data; p2 = p2->link; p1 = p1->link; }else if ( p1->data < p2->data ){ q->data = p1->data; p1 = p1->link; }else{ q->data = p2->data; p2 = p2->link; }p->link = q; p = q;}while ( p1 != NULL ){q = new ListNode; q->data = p1->data; p1 = p1->link;p->link = q; p = q;}while ( p2 != NULL ){q = new ListNode; q->data = p2->data; p2 = p2->link;p->link = q; p = q;}p->link = NULL;return first;}2.设有一个线性表(e0, e1, …, e n-2, e n-1) 存放在一个一维数组A[arraysize]中的前n个数组元素位置。
请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为(e n-1, e n-2, …, e1, e0)。
数组原地逆置算法参数表中给出数组A[ ] 及指定的数组中前n个元素,函数执行后从A[ ] 中得到数组原地逆置后的结果。
Template<class T>void inverse ( T A[ ], int n ){ T tmp;for ( int I = 0; I <= ( n-1 ) / 2; I++ ){ tmp = A[I]; A[I] = A[n-I-1]; A[n-I-1] = tmp;}3.设有两个整数类型的顺序表A(有m个元素)和B(有n个元素),其元素均以从小到大的升序排列。
试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C的元素也以从小到大的升序排列。
合并两个升序排列的顺序表的算法参数表给出参加运算的三个顺序表A、B与C。
从C中得到执行结果。
算法中用到顺序表的4个共有函数:Length( ) 求表的当前长度;maxLength( ) 求表的最大允许长度;getData(k) 提取第k个元素的值;setData(k) 修改第k个元素的值。
Template <class T>void merge ( SeqList<int>& A, SeqList<int>& B, SeqList<int>& C ){ int m = A.Length( ), n = B.Length( ), mpn = m + n;if ( mpn > C.maxLength( ) ){ cerr << “合并后表的长度超出表的最大允许长度”<< endl;exit (1);}int I = 0, j = 0, k = 0, av = A.getData(I), bv = B.getData(j);while ( I < m && j < n )if ( av <= bv ){ C.setData(k++, av); av = A.getData(++I); }else{ C.setData(k++, bv); B.getData(++j); }if ( I < m )while ( k < mpn ) { C.setData(k++, av); av = A.getData(++I); }elsewhile ( k < mpn ) { C.setData(k++, bv); B.getData(++j); }}4.已知一个带表头结点的单链表中包含有三类字符(数字字符、字母字符和其他字符),试编写一个函数,构造三个新的单链表,使每个单链表中只包含同一类字符。
要求使用原表的空间,表头结点可以另辟空间。
算法如下typedef char elemType;void Separate ( ListNode * LA, ListNode * LB, ListNode * LC ){ //原来的单链表是LA, 新的三个单链表是LA, LB, LC ListNode * p = LA->link;ListNode * pa = LA, * pb = LB, * pc = LC;while ( p != NULL ){ if ( isdigit (p->data) ) { pa->link = p; pa = p; }else if ( isalpha (p->data) ){ pb->link = p; pb = p; }else{ pc->link = p; pc = p; }p = p->link;}pa->link = NULL; pb->link = NULL; pc->link = NULL;}5.一颗具有n个结点的完全二叉树以顺序方式存储在数组A中,设计一个算法构造该二叉树的二叉链存储结构。
算法如下void ctree(BTNode *&t,ElemType a[],int i,int n){ if(i>n)t=NULL;else{ t=(BTNode*)malloc(sizeof(BTNode));t->data=a[i-1];ctree(t->lchild,a,2*i,n);ctree(t->rchild,a,2*i+1,n);}}6.编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。
算法返回两个数组:A[ ]记录字符串中有多少种不同的字符,C[ ]记录每一种字符的出现次数。
此外,还要返回不同字符数。
求输入字符串中各种不同字符出现频度的算法由于需要返回多种信息,参数表中引入引用参数:A[ ]中记录字符串中有多少种不同的字符,C[ ]中记录每一种字符的出现次数,k返回不同字符数。
#include <iostream.h>#include "string1.h"void frequency( String& s, char A[ ], int C[ ], int &k ){ int I, j, len = s.Length( );if ( !len ){ cout << "The string is empty. " << endl; k = 0; return; }else{ A[0] = s[0]; C[0] = 1; k = 1;for ( I = 1; I < len; I++ ) C[I] = 0;for ( I = 1; I < len; I++ ){ for ( j = 0; j < k && A[j] != s[I]; j++ );if ( j == k ){ A[k] = s[I]; C[k]++; k++; }elseC[j]++;}}}7.已知二叉树中的结点类型用BinTreeNode表示,被定义为:struct BinTreeNode { char data; BinTreeNode *leftChild, *rightChild; };其中data为结点值域,leftChild和rightChild分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树高度的算法,该高度由函数返回。
假定根结点的层次为0,参数BT初始指向这棵二叉树的根结点。
Int BTreeHeight ( BinTreeNode* BT );算法如下int BTreeHeight ( BinTreeNode* BT ){ if ( BT == NULL ) return –1; //对于空树,返回-1并结束递归,else{ int h1 = BTreeHeight ( BT->leftChild ); //计算左子树的高度,int h2 = BTreeHeight (BT->rightChild ); //计算右子树的高度,if ( h1 > h2 )return h1+1;elsereturn h2+1; //返回树的高度,}}8.已知二叉树中的结点类型用BinTreeNode表示,被定义为:struct BTreeNode { char data;BinTreeNode *leftChild, *rightChild; };其中data为结点值域,leftChild和rightChild分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中结点总数的算法,该总数值由函数返回。
假定参数BT初始指向这棵二叉树的根结点。
Int BTreeCount ( BinTreeNode* BT );算法如下int BTreeCount ( BinTreeNode* BT ){ if ( BT == NULL ) return 0;elsereturn BTreeCount ( BT->leftChild ) + BTreeCount ( BT->rightChild ) + 1;}9.已知二叉树中的结点类型用BinTreeNode表示,被定义为:struct BinTreeNode { char data; BinTreeNode *leftChild, *rightChild; };其中data为结点值域,leftChild和rightChild分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中叶子结点总数的算法,该总数值由函数返回。