交换序列a,b中的元素,使|sum(a)-sum(b)|最小 [No. 49]

本文介绍一种算法,通过交换两个整数数组中的元素,使这两个数组的元素和之间的差值达到最小。该算法首先计算两个数组的初始和之差,然后寻找合适的元素进行交换以逐步减小这个差值。
有两个序列a,b,大小都为n,序列元素的值任意整数,无序.

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:
int[] a = {100,99,98,1,2, 3};
int[] b = {1, 2, 3, 4,5,40};

求解思路:
当前数组a和数组b的和之差为
A = sum(a) - sum(b)
a的第i个元素和b的第j个元素交换后,a和b的和之差为
A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])
= sum(a) - sum(b) - 2 (a[i] - b[j])
= A - 2 (a[i] - b[j])
设x = a[i] - b[j], 则交换后差值变为 A’ = A - 2x

假设A > 0, 当x 在 (0,A)之间时,做这样的交换才能使得交换后的a和b的和之差变小,x越接近A/2效果越好,
如果找不到在(0,A)之间的x,则当前的a和b就是答案。
所以算法大概如下:

在a和b中寻找使得x在(0,A)之间并且最接近A/2的i和j,交换相应的i和j元素,重新计算A后,重复前面的步骤直至找不到(0,A)之间的x为止。

public static void minDiff(int[] a, int[] b) {
	//get the summations of the arrays		
	int sum1 = sum(a);
	int sum2 = sum(b);
	if (sum1 == sum2) return;
	
	//we use big array to denote the array whose summation is larger.
	int[] big = b;
	int[] small = a;
	if (sum1 > sum2) {		
		big = a;
		small = b;
	} 
	// the boolean value "shift" is used to denote that whether there exists 
    // a pair of elements, ai and bj, such that (ai-bj) < diff/2;
	boolean shift = true;
	int diff = 1; 
	while (shift == true  && diff > 0) {
		shift = false;
		diff = sum(big) - sum(small);
		if (diff < 0) return;
		int maxDiff = Integer.MAX_VALUE;
		//pa and pb records the switch position
		int pa = -1;
		int pb = -1;
		//the two for loops are used to find the pair of elements ai and bj 
		//such that (ai-bj) < diff/2 when sum(a) > sum(b).
		for (int i = 0; i < big.length; i++) {
			for (int j = 0; j < small.length; j++) {
				if (big[i] > small[j]) {
					int tempDiff = Math.abs(diff - 2*(big[i] - small[j]));
					//the condition "tempDiff < diff" is very important, if such condition holds, 						
					//we can switch the elements to make the difference smaller
					//otherwise, we can't, and we should quit the while loop
					if (tempDiff < maxDiff && tempDiff < diff) {
						shift = true;
						maxDiff = tempDiff;
						pa = i;pb = j;
					}
				}
			}
		}
		if (shift == true) {
			int temp = big[pa];
			big[pa] = small[pb];
			small[pb] = temp;
		}
	}
 }


c++ 对于两个序列 $a_1, \ldots, a_n$ 与 $b_1, \ldots, b_m$,定义 $a + b$ 表示将 $a, b$ **向右按位对齐** 后对位相加,得到的长度为 $\max(n, m)$ 的新序列。形式化地,若 $n \geq m$,则有 $$ a + b = [a_1, a_2, \ldots, a_{n-m}, a_{n-m+1} + b_1, a_{n-m+2} + b_2, \ldots, a_n + b_m]; $$ 若 $n < m$,则由对称性 $a + b$ 等于 $b + a$,可以给出类似的形式化定义。 BY 认为一个序列是 *别样的*,当且仅当这个序列可以被表示为至少 $1$ 个 **单调不增的** 正整数序列依次进行加法运算的结果。 他有多组询问。每组询问给出非负整数序列 $x_1, \ldots, x_n$,你需要判断序列 $x$ 是否为 *别样的*。 ## 输入格式 **本题有多组测试数据。** 输入的第一行包含一个正整数 $T$,表示测试数据组数。接下来依次输入每组测试数据。对于每组测试数据: - 第一行包含一个正整数 $n$,表示序列 $x$ 的长度。 - 第二行包含 $n$ 个非负整数 $x_1, \ldots, x_n$,表示序列 $x$。 ## 输出格式 对于每组测试数据,输出一行一个字符串: -序列 $x$ 是 *别样的*,则输出 `Yes`; - 否则,输出 `No`。 ## 输入输出样例 #1 ### 输入 #1 ``` 3 6 6 4 3 5 4 4 3 3 2 1 4 1 3 4 2 ``` ### 输出 #1 ``` Yes Yes No ``` ## 说明/提示 #### 样例解释 对于第一组测试数据,可以选择 $a_1 = [6, 4, 3, 2, 2, 1], a_2 = [3, 3, 3]$,容易验证 $a_1 + a_2 = [6, 4, 3, 2+3, 2+3, 1+3] = [6, 4, 3, 5, 4, 4] = x$,因此序列 $x$ 是 *别样的*。 对于第二组测试数据,序列 $x$ 本身是单调不增序列,因此其是 *别样的*。 对于第三组测试数据,可以证明不存在任何选取单调不增序列的方案,满足其和为 $[1, 3, 4, 2]$。 #### 子任务与数据范围 **本题采用子任务捆绑测试,你需要通过一整个子任务的所有测试点才能获得对应的分数**。 对于所有测试数据,保证: - $1 \le T \le 10^6$; - $1 \le n \le 10^6$,$1 \le \sum n \le 10^6$; - $0 \le x_i \le 10^9$。 | 子任务编号 | $\sum n \leq$ | $x_i \leq$ | 特殊性质 | 分数 | | :--------: | :-----------: | :--------: | :----------: | :--: | | $1$ | $8$ | $8$ || $27$ | | $2$ | $10^6$ | $10^9$ | $x_n = 1$ | $24$ | | $3$ | ^ | ^ | $x$ 单调递增 | $13$ | | $4$ | ^ | ^ || $36$ |
最新发布
11-17
2025年CCF非专业级别软件能力认证第一轮模拟测 试 (CSP-J1)入门级 C++ 语言试题 认证时间:2024年9月21日09:30-11:30 一、单项选择题(共15题,每题2分,共计30分) 1. 以下哪一项不属于内存(D) A. RAM B. ROM C. Cache D. DOS 2. 下列四种不同进制的数中,与其他三项不同的是(D) A. (11111101001)2 B. (5622)7 C. (BCA)13 D. (13231)6 3. 现在有一个存有2048 × 1024 像素的黑白图像,请问需要多大存储空间?B A. 512KB B. 256KB C. 2MB D. 1MB 4. 5个男生,3个女生围成一圈,要求女生之间互不相邻,求有多少种方案?A A. 1440 B. 7200 C. 576 D. 2880 5. 中国计算机学会于( B )年创办全国青少年计算机程序设计竞赛。 A. 1983 B. 1984 C. 1985 D. 1986 6. 现在有序列 “7,4,5,2,3” 若使用冒泡排序获得其单调递增序列,需要进行多少次交换操作? A. 6 B. 7 C. 8 D. 9 7. 二叉树的前序遍历为 “1,2,3,4,5,6,7,8,9”,中序遍历为 “3,2,5,4,6,1,7,9,8”,则后序遍历为() A. “3,5,6,4,2,9,8,7,1” B. “4,5,6,3,2,9,8,7,1” C. “4,5,6,3,2,9,7,8,1” D. “4,6,5,3,2,9,7,8,1” 8. 能找出欧拉回路的无向图可能不具有的性质有() A. 所有点的度数都为偶数 B.中的所有点互相连通 C. 图中包含的边数为偶数 D. 一定能找到一条欧拉路 9. 以下哪项不是C++语言的关键字() A. goto B. do C. caseI D. cin 10. 2025以内,与2025互质的数有多少个?() A. 1080 B. 1024 C. 1001 D. 945 11. 16 位 unsigned short int 的数据范围是() A. 0~32767 B. 0~32768 C. 0~65535 D. 0~65536 12. (3+(7-2)*5-6)/2 的后缀表达式为() A. 3 7 2 - 5 * 6 - + 2 / B. 3 7 + 2 - 5 * 6 - 2 / C. 3 7 2 - 5 * 6 + - 2 / D. 6 7 2 - 5 * 3 + - 2 / 13. 73 的格雷码为() A. 1010101 B. 1001001 C. 1101101 D. 0110110 14. 下列语言中使用解释器将源代码转为机器代码的语言为() A. C# B. JavaScript C. Java D. C++ 15. 在使用快速幂算法时,计算2^23时需要使用多少次乘法() A. 6 B. 7 C. 8 D. 22 二、 阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填"T",错误填"F";除特殊说明外,判断题1.5 分,选择题3分,共计40分) 程序一 16. 第 行中 函数若传入的 则可能导致编译错误() 17. tree[i] 表示 a[i]~a[i+lowbit(i)] 的和() 18. ask(i) 求解的是 a[1]~a[i] 的和 () #include<iostream> using namespace std; const int NN = 1e5; int n; int a[NN]; int tree[NN]; int lowbit(int x){return x & (-x);} void add(int pos,int num){ while(pos<= n){ tree[pos] += num; pos += lowbit(pos); } } int ask(int pos){ int ans = 0; while(pos){ ans += tree[pos]; pos -= lowbit(pos); } return ans; } int main(){ cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; for(int i = 1; i <= n; ++i) add(i,a[i]); int m; cin >> m; for(int i = 1,pos,num; i <= m; ++i){ cin >> pos >> num; a[pos] += num; add(pos,num); } int query; cin >> query; while(query--){ int l,r; cin >> l >> r; cout << ask(r) - ask(l-1) << endl; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 19. 当输入如下时,输出为() A. 13 B. 16 C. 17 D. 20 20. 程序第 行,若将 query++ 换为 `++query 对于程序(输入合法)的影响为() A. 能得到所有正确的输出,但是输入结束后程序未能正常结束 B. 只能得到部分输出,且输出的答案并非完全正确 C. 能得到所有正确的输出,且输入结束后程序正常结束 D. 只能得到部分输出,但输出的答案完全正确 程序二 21. 当输入的字符串为 AC{[3FUN}]% 时程序的输出为 AC{FUNFUNFUN} () 22. (2分)程序的输出一定不包含 “%” 和 “ ”(空格)() 5 3 1 2 4 6 1 1 3 2 4 1 2 5 1 2 3 4 5 6 7 #include<iostream> #include<string> using namespace std; string encode(){ int num; char ch; string ans = "", ori = ""; while(cin >> ch && ch != '%'){ if(ch == '['){ cin >> num; ori = encode(); while(num--) ans += ori; } else if(ch == ']') return ans; else ans += ch; } return ans; } int main(){ cout << encode(); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 23. 将第 行替换为 while(ch != '%' && cin >> ch){ 对程序答案的输出没有影响() 24. 当输入的字符串为 AC[3 2%[2 FUN]%HAPPY 时,输出为() A. AC222FUNFUN B. AC2FUNFUN2FUNFUN2FUNFUN C. AC222FUNFUNHAPPY D. AC2FUNFUN2FUNFUN2FUNFUNHAPPY 25. (4分)当输入的字符串为 AC[3 2 3 %[4 [2% 3 2 FUN]% 时,输出为() A. AC23232332FUN32FUN32FUN32FUN B. AC2 3 2 3 2 3 2 FUN2 FUN2 FUN2 FUN C. AC2 3 2 3 2 3 2 3 2 FUN 3 2 FUN 3 2 FUN 3 2 FUN D. AC2323232FUN2FUN2FUN2FUN 26. 若将 encode 函数所有的返回语句都改为 return ori + ans + ori 则输入 AC[3FUN]% 得到的输出为() A. ACFUNFUNFUNFUNFUN B. FUNACFUNFUNFUNFUN C. FUNFUNACFUNFUNFUN D. FUNFUNFUNACFUNFUN 程序三 #include<iostream> using namespace std; int n,a[500010],c[500010]; long long ans; void merge_sort(int left,int right) { if(left == right) return; int mid = (left + right) / 2, i = left, j = mid+1, k = left; merge_sort(left,mid); merge_sort(mid+1,right); while(i <= mid && j <= right) if(a[i] <= a[j]) c[k++] = a[i++]; else c[k++] = a[j++], ans += mid-i; while(i <= mid) c[k++] = a[i++]; while(j <= right) c[k++] = a[j++]; for(int i = left; i <= right; i++) a[i] = c[i]; } int main(){ cin >> n; for(int i = 1; i <= n; i++) cin >> a[i]; merge_sort(1,n); cout << ans; return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 27. 若将第 行 的赋值改为 mid = left + (right-left)/2.0 ,对程序无影响( ) 28. 该程序总是输出非负整数() 29. 该程序用于求解逆序对个数() 30. 若输入 5 2 4 3 1 3 则程序输出为() A. 2 B. 4 C. 5 D. 10 31. (4分)若将第 行的 ans += mid - i 改为 ans += right - i - mid + 2 并输入 5 2 4 3 1 3 则程序 输出为() A. 2 B. 4 C. 5 D. 10 32. 若 , 则程序可能输出的答案的最大值为() A. 12 B. 15 C.18 D. 21 三、完善程序(单选题,每小题 分,共计 分) 1 立方根求解 问题:给一浮点数 ,输出其立方根(保留5位小数) 33. ①处应填() A. 1e5 B. 1e-5 C. 1e-6 D. 1e-7 34. ②处应填() A. right - left > eps B. right - left > -eps C. left - right > eps D. left - right > -eps 35. ③处应填() A. left = mid B. right = mid C. left = mid + eps D. right = mid - eps 36. ④处应填() A. left = mid B. right = mid C. left = mid + eps D. right = mid - eps #include<cstdio> using namespace std; const double eps = ①; int main(){ double a; double left = -1000.0,right = 1000.0,mid; scanf("%lf",&a); while(){ mid = left + (right - left) / 2; if(mid * mid < a / mid) ③; else ④; } printf("⑤",mid); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 37. ⑤处应填() A. %5.lf B. %.5lf C. %6.lf D. %.6lf 2 石子合并 给一排 堆石子,每堆石子的质量为 ,每次合并操作代价为两堆石子质量之和,求将所有石子堆合并为一个大石堆 所需要的最小代价 38. ①处应填() A. sum_pre[i+1] = sum_pre[i] + a[i+1] B. sum_pre[i+1] = sum_pre[i] + a[i] C. sum_pre[i] = sum_pre[i-1] + a[i-1] D. sum_pre[i] = sum_pre[i-1] + a[i] 39. ②处应填() A. 0 B. 1 C. 2 D. 3 40. ③处应填() A. i + len B. i + len - 1 C. n - i - len D. n - i - len + 1 41. ④处应填() A. dp[i][k-1] + dp[k][j] + sum_pre[j] - sum_pre[i] B. dp[i][k-1] + dp[k][j] + sum_pre[j] - sum_pre[i-1] C. dp[i][k] + dp[k+1][j] + sum_pre[j] - sum_pre[i] D. dp[i][k] + dp[k+1][j] + sum_pre[j] - sum_pre[i-1] 42. ⑤处应填() A. dp[1][1] B. dp[n][n] C. dp[1][n] D. dp[1][1] + dp[1][n] + dp[n][n] #include<iostream> using namespace std; int n,a[310],sum_pre[310],dp[310][310]; int main() { cin >> n; memset(dp,0x3f,sizeof(dp)); for(int i = 1; i <= n; i++) { cin >> a[i]; ①; ②; } for(int len = ③; len <= n; len++) { for(int i = 1; i <= n-len+1; i++) { int j = ③; for(int k = i; k < j; k++) dp[i][j] = min(dp[i][j], ④); } } cout << dp[1][n]; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
07-25
二叉树的形态 由 3 个结点可以构造出 ▁▁▁▁▁ 种不同形态的二叉树。 A. 2 B. 3 C. 4 D. 5 分数 1 作者 严蔚敏 单位 清华大学 若一棵非空二叉树先序遍历与后序遍历的序列正好相反,则该二叉树 ▁▁▁▁▁ 。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D. 为任意二叉树 分数 1 作者 严蔚敏 单位 清华大学 二叉树的高度 若根节点为高度1,一棵具有 1025 个结点的二叉树的高度为 ▁▁▁▁▁ 。 A. 10 B. 11 C. 11~1025 之间 D. 10~1024 之间 分数 3 作者 考研真题 单位 浙江大学 对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是: A. 56 B. 57 C. 58 D. 60 分数 2 作者 王俊玲 单位 集美大学 度为3的树中第4层上至多有( )个结点。 A. 12 B. 81 C. 27 D. 8 分数 2 作者 王俊玲 单位 集美大学 如果一个完全二叉树最底下一层为第六层(根为第一层)且该层共有8个叶结点,那么该完全二叉树共有多少个结点? A. 31 B. 39 C. 63 D. 71 分数 2 作者 王俊玲 单位 集美大学 若有一二叉树的总结点数为98,只有一个儿子的结点数为48,则该树的叶结点数是多少? A. 25 B. 50 C. 不确定 D. 这样的树不存在 分数 2 作者 王俊玲 单位 集美大学 对于二叉树,如果其中序遍历结果与前序遍历结果一样,那么可以断定该二叉树: A. 是完全二叉树 B. 所有结点都没有左儿子 C. 所有结点都没有右儿子 D. 这样的树不存在 分数 2 作者 王俊玲 单位 集美大学 已知一二叉树的后序和中序遍历的结果分别是FDEBGCA 和FDBEACG,那么该二叉树的前序遍历结果是什么? A. ABDFECG B. ABDEFCG C. ABDFEGC D. ABCDEFG 分数 2 作者 王俊玲 单位 集美大学 在上题的搜索树中删除结点1,那么删除后该搜索树的后序遍历结果是: A. 243765 B. 432765 C. 234567 D. 765432 分数 2 作者 王俊玲 单位 集美大学 若一AVL树的结点数是21,则该树的高度至多是多少?注:只有一个根节点的树高度为0 A. 4 B. 5 C. 6 D. 7 分数 2 作者 王俊玲 单位 集美大学 下列序列中哪个是最小堆? A. 2, 55, 52, 72, 28, 98, 71 B. 2, 28, 71, 72, 55, 98, 52 C. 2, 28, 52, 72, 55, 98, 71 D. 28, 2, 71, 72, 55, 98, 52 分数 2 作者 王俊玲 单位 集美大学 在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为: A. {97,76,65,83,49,13,27,50} B. {97,83,65,76,49,13,27,50} C. {97,83,65,76,50,13,27,49} D. {97,83,65,76,49,50,13,27} 分数 2 作者 王俊玲 单位 集美大学 对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的: A. 二叉搜索树(查找树)高度大于等于最小堆高度 B. 对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列 C.最小堆根节点到其任何叶结点的路径上的结点值构成从小到大的序列 D. 对该最小堆进行按层序(level order)遍历可得到从小到大的序列 分数 2 作者 王俊玲 单位 集美大学 为五个使用频率不同的字符设计哈夫曼编码,下列方案中哪个不可能是哈夫曼编码? A. 00,100,101,110,111 B. 000,001,01,10,11 C. 0000,0001,001,01,1 D. 000,001,010,011,1 分数 2 作者 王俊玲 单位 集美大学 已知a、b两个元素均是所在集合的根结点,且分别位于数组分量3和2位置上,其parent值分别为-3,-2。问:将这两个集合按集合大小合并后,a和b的parent值分别是多少? A. -5,2 B. -5,3 C. -3,3 D. 2,-2 分数 2 作者 王东 单位 贵州师范学院 在下列存储形式中,( )不是树的存储形式。 A. 双亲表示法 B. 孩子链表表示法 C. 孩子兄弟表示法 D. 顺序存储表示法 分数 2 作者 王东 单位 贵州师范学院 引入二叉线索树的目的是( )。 A. 加快查找结点的前驱或后继的速度 B. 为了能在二叉树中方便的进行插入与删除 C. 为了能方便的找到双亲 D. 使二叉树的遍历结果唯一 分数 2 作者 王东 单位 贵州师范学院 以下说法中,正确的是( )。 A. 在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点 B. 任何一棵二叉树,叶子结点个数为度为2的结点数减1,即n0=n2-1 C. 完全二叉树不适合顺序存储结构,只有满二叉树适合顺序存储结构 D. 结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子的编号为2i 分数 2 作者 王东 单位 贵州师范学院 若一棵深度为6的完全二叉树的第6层有3个叶子结点,则该二叉树共有( )个叶子结点。 A. 17 B. 18 C. 19 D. 20 分数 2 作者 王东 单位 贵州师范学院 若一棵二叉树有126个结点,在第7层(根结点在第1层)至多有( )个结点。 A. 32 B. 64 C. 63 D. 不存在第7层 分数 2 作者 王东 单位 贵州师范学院 在一棵完全二叉树中,其根的序号为1,(  )可判定序号为 p和q 的两个结点是否在同一层。 A. ⌊log 2 ​ p⌋=⌊log 2 ​ q⌋ B. log 2 ​ p=log 2 ​ q C. ⌊log 2 ​ p⌋+1=⌊log 2 ​ q⌋ D. ⌊log 2 ​ p⌋=⌊log 2 ​ q⌋+1 分数 2 作者 王东 单位 贵州师范学院 在任何一棵二叉树中,若结点a有左孩子b、右孩子c,则在结点的先序序列、中序序列、后序序列中,( )。 A. 结点b一定在结点a的前面 B. 结点a一定在结点c的前面 C. 结点b一定在结点c的前面 D. 结点a一定在结点b的前面 分数 2 作者 YJ 单位 西南石油大学 在完全二叉树中,若一个结点是叶结点,则它没( )。 A. 左子结点 B. 右子结点 C. 左子结点和右子结点 D. 左子结点,右子结点和兄弟结点 分数 2 作者 YJ 单位 西南石油大学 由3 个结点可以构造出多少种不同的二叉树( ) A. 2 B. 3 C. 4 D. 5 分数 2 作者 YJ 单位 西南石油大学 下面几个符号串编码集合中,不是前缀编码的是( )。 A. {0,10,110,1111} B. {11,10,001,101,0001} C. {00,010,0110,1000} D. {b,c,aa,ac,aba,abb,abc} 分数 2 作者 YJ 单位 西南石油大学 一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是( )。 A. A[2i](2i<=n) B. A[2i+1](2i+1<=n) C. A[i-2] D. 条件不充分,无法确定 分数 2 作者 YJ 单位 西南石油大学 在二叉树的二叉链表结构中,指针p所指结点为叶子结点的条件是( )。 A. p=NULL B. p->lchild==NULL && p->rchlid==NULL C. p->lchild==NULL D. p->rchlid==NULL 分数 2 作者 YJ 单位 西南石油大学 深度为k的完全二叉树至少有(1)个结点,至多有(2)个结点。 A. (1)2k-1 (2)2k-1 B. (1)2k (2)2 k -1 C. (1)2 k (2)2 k +1 D. (1)2 k−1 (2)2 k -1 分数 2 作者 YJ 单位 西南石油大学 高度为8的完全二叉树至少有( )个叶子结点。 A. 128 B. 63 C. 64 D. 32 分数 2 作者 YJ 单位 西南石油大学 一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是( )。 A. 2 k−2 B. 2 k−2 +1 C. 2 k−1 +1 D. 2 k−1 分数 2 作者 YJ 单位 西南石油大学 二叉树的先序序列和中序序列相同的条件是( )。 A. 任何结点至多只有左子女的二叉树 B. 任何结点至多只有右子女的二叉树 C. 右子树为空 D. 左子树为空 分数 2 作者 考研真题 单位 浙江大学 给定平衡二叉树如下图所示,插入关键字 23 后,根中的关键字是: t1.png A. 16 B. 20 C. 23 D. 25 分数 2 作者 考研真题 单位 浙江大学 将关键字 6、9、1、5、8、4、7 依次插入到初始为空的大根堆 H 中,得到的 H 是: A. 9、8、7、6、5、4、1 B. 9、8、7、5、6、1、4 C. 9、8、7、5、6、4、1 D. 9、6、7、5、8、4、1 分数 1 作者 张泳 单位 浙大城市学院 若一棵3次树中有2个度为3的节点,1个度为2的节点,2个度为1的节点,该树一共有 ( ) 个节点 A. 5 B. 8 C. 10 D. 11 分数 1 作者 张泳 单位 浙大城市学院 以下关于二叉树的说法中正确的是( ) A. 二叉树中每个节点的度均为2 B. 二叉树中至少有一个节点的度为2 C. 二叉树中每个节点的度可以小于2 D. 二叉树中至少有一个节点 分数 1 作者 张泳 单位 浙大城市学院 一棵二叉树中有7个叶子节点和5个单分支节点,其总共有( )个节点 A. 16 B. 18 C. 12 D. 31 分数 1 作者 张泳 单位 浙大城市学院 深度为5的二叉树至多有 ( )个节点 A. 16 B. 32 C. 31 D. 10 分数 1 作者 张泳 单位 浙大城市学院 一个具有1025个节点的二叉树的高h为( ) A. 11 B. 10 C. 11~1025 D. 12~1024 分数 1 作者 张泳 单位 浙大城市学院 一棵完全二叉树中有501个叶子节点,则至少有 ( ) 个节点 A. 501 B. 502 C. 1001 D. 1002 分数 1 作者 张泳 单位 浙大城市学院 一棵高度为8的完全二叉树至少有( )叶子节点 A. 63 B. 64 C. 127 D. 128 分数 1 作者 张泳 单位 浙大城市学院 一棵满二叉树中127个节点,其中叶子节点的个数是( ) A. 63 B. 64 C. 65 D. 不确定 分数 1 作者 张泳 单位 浙大城市学院 某二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树一定是( ) A. 空或只有一个节点 B. 完全二叉树 C. 二叉排序树 D. 高度等于其节点数 分数 1 作者 张泳 单位 浙大城市学院 一棵二叉树的先序遍历序列为ABCDEF,中序遍历序列为CBAEDF,则后序遍历序列为( ) A. CBEFDA B. FEDCBA C. CBEDFA D. 不确定 分数 1 作者 严蔚敏 单位 清华大学 若一棵非空二叉树 ▁▁▁▁▁,则中序遍历与层次遍历的序列完全相同。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D. 为任意二叉树 分数 1 作者 李祥 单位 湖北经济学院 若一棵非空二叉树 ▁▁▁▁▁,则中序遍历与层次遍历的序列正好相反。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D. 为任意二叉树 分数 1 作者 李祥 单位 湖北经济学院 对一棵二叉树的结点从 1 开始顺序编号。要求每个结点的编号都小于其子树所有结点的编号,且左子树所有结点的编号都小于右子树所有结点的编号。可采用 ▁▁▁▁▁ 实现编号。 A. 先序遍历 B. 后序遍历 C. 中序遍历 D. 层次遍历 分数 1 作者 严蔚敏 单位 清华大学 分别按以下顺序插入结点到空二叉排序树中,▁▁▁▁▁ 与其它三个序列所得到的结果不同。 A. 10, 8, 9, 6, 12, 11, 13 B. 10, 12, 11, 13, 8, 6, 9 C. 10, 6, 8, 9, 12, 11, 13 D.
10-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值