《数据结构》_PTA_数据结构作业5:树和二叉树

判断题:

1-1
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。
F

1-2
存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。
F

1-3
哈夫曼树中一定没有度为 1 的结点。
T

1-4
一棵非空二叉树,若先序遍历与后序遍历的序列相反,则该二叉树只有一个叶子结点。
T

1-5
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。
T

1-6
已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。
T

1-7
一棵有124个结点的完全二叉树,其叶结点个数是确定的。
T

1-8
对于一个有N个结点、K条边的森林,不能确定它共有几棵树。
F

1-9
对N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。
T

1-10
若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。
F

1-11
某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。
T

1-12
某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。
F

1-13
将一棵完全二叉树存于数组中(根结点的下标为1)。则下标为23和24的两个结点是兄弟。
F

1-14
若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。
F

1-15
哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字符的哈夫曼码的长度一定是唯一的。
F

选择题

2-1
树最适合于用来表示(元素之间具有分支层次关系的数据)

2-2
设每个d叉树的结点有d个指针指向子树,有n个结点的d叉树有多少空链域?( n(d−1) + 1 )

2-3
某二叉树的中序序列和后序序列正好相反,则该二叉树一定是(任一结点无左孩子)

2-4
某二叉树的前序和后序遍历序列正好相反,则该二叉树一定是(高度等于其结点数)

2-5
已知一棵二叉树的先序遍历结果是ABC,则以下哪个序列是不可能的中序遍历结果:(CAB)

2-6
如果二叉树的后序遍历结果是FDEBGCA,中序遍历结果是FDBEACG,那么该二叉树的前序遍历结果是什么?(ABDFECG)

2-7
如果A和B都是二叉树的叶结点,那么下面判断中哪个是对的?
A.存在一种二叉树结构,其前序遍历结果是…A…B…,而中序遍历结果是…B…A…
B.存在一种二叉树结构,其中序遍历结果是…A…B…,而后序遍历结果是…B…A…
C.存在一种二叉树结构,其前序遍历结果是…A…B…,而后序遍历结果是…B…A…
D.以上三种都是错的

2-8
给定二叉树如下图所示。设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。若遍历后的结点序列为3、1、7、5、6、2、4,则其遍历方式是:(RNL)
在这里插入图片描述
2-9
在下述结论中,正确的是:(①④)
①只有一个结点的二叉树的度为0;
②二叉树的度为2;
③二叉树的左右子树可任意交换;
④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树

2-10
任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序(不发生改变)

2-11
按照二叉树的定义,具有3个结点的二叉树有几种?(5)

2-12
二叉树中第5层(根的层号为1)上的结点个数最多为:(16)

性质1:二叉树第i层上的结点数目最多为 2^(i-1)(i≥1)。
性质2:深度为k的二叉树至多有2^k -1个结点(k≥1)。

2-13
先序遍历图示二叉树的结果为(A,B,D,H,I,E,C,F,G)
在这里插入图片描述

2-14
已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:(111)

2-15
具有65个结点的完全二叉树其深度为(根的深度为1): (7)

2-16
下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是:
在这里插入图片描述

2-17
对于一个有N个结点、K条边的森林,共有几棵树?(N−K)

2-18
设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。则与森林F对应的二叉树根结点的右子树上的结点个数是:(M2+M3)

2-19
对N(N≥2)个权值均不相同的字符构造哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是:(该树一定是一棵完全二叉树)

2-20
设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:(25)

2-21
设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?(2)

2-22
由分别带权为9、2、5、7的四个叶子结点构成一棵哈夫曼树,该树的带权路径长度为:(44)

2-23
已知一棵完全二叉树的第9层(设根为第1层)有100个叶结点,则该完全二叉树的结点个数最多是:(823)

2-24
如果二叉树的前序遍历结果是12345,后序遍历结果是32541,那么该二叉树的中序遍历结果是什么?(无法确定)

2-25
二叉树的中序遍历也可以循环地完成。给定循环中堆栈的操作序列如下(其中push为入栈,pop为出栈):push(1), push(2), push(3), pop(), push(4), pop(), pop(), push(5), pop(), pop(), push(6), pop()
以下哪句是对的?(3和5是兄弟结点)

2-26
具有1102个结点的完全二叉树一定有(551)个叶子结点

2-27
下面的函数PreOrderPrintLeaves(BinTree BT)按前序遍历的顺序打印出二叉树BT的所有叶子结点。则下列哪条表达式应被填在空中?
在这里插入图片描述
!(BT->Left || BT->Right)

2-28
若森林F有15条边、25个结点,则F包含树的个数是:(10

2-29
要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是:(只有右子树

2-30
已知字符集{ a, b, c, d, e, f, g, h }。若各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011110101 的译码结果是:(afeefgd)

2-31
一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为(16)个。

2-32
若根节点为高度1,一棵具有 1025 个结点的二叉树的高度为(11~1025 之间)

2-33
设一棵非空完全二叉树 T 的所有叶节点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是:(2k−1

2-34
已知字符集{ a, b, c, d, e, f },若各字符出现的次数分别为{ 6, 3, 8, 2, 10, 4 },则对应字符集中各字符的哈夫曼编码可能是:(00, 1011, 01, 1010, 11, 100

2-35
已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,则该二叉树形态中,父节点的右子节点为(G)。

2-36
若将一棵树 T 转化为对应的二叉树 BT,则下列对 BT 的遍历中,其遍历序列与 T 的后根遍历序列相同的是:(中序遍历

2-37
对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是:(58

2-38
设 T 是非空二叉树,若 T 的先序遍历和中序遍历序列相同,则 T 的形态是(所有结点只有右孩子

2-39
设 T 是非空二叉树,若 T 的先序遍历和后序遍历序列相同,则 T 的形态是 (只有一个根结点

2-40
设 T 是非空二叉树,若 T 的后序遍历和中序遍历序列相同,则 T 的形态是(所有结点只有左孩子

2-41
以二叉链表作为二叉树的存储结构,在具有 n 个结点的二叉链表中(n>0),空链域的个数为(n+1

2-42
已知二叉树的前序遍历序列为 ABDCEFG,中序遍历序列为 DBCAFEG,则后序遍历序列为(DCBFGEA

2-43
对于任意一棵高度为 5 且有 10 个结点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元的数量至少是:(31

因为是顺序存储结构保存,所以需要的存储单元是给定高度的全部结点都要考虑。
高度为5的满二叉树共有:
25-1=31个结点
31*1个存储单元=31;

2-44
已知森林 F 及与之对应的二叉树 T,若 F 的先根遍历序列是 a, b, c, d, e, f,后根遍历序列是 b, a, d, f, e, c,则 T 的后序遍历序列是:(b, f, e, d, c, a

2-45
一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点个数是( 82 )。

2-46
一棵二叉树中有7个度为2的结点和5个度为1的结点,其总共有(20 )个结点。

2-47
某森林 F 对应的二叉树为 T,若 T 的先序遍历序列是 a, b, d, c, e, g, f,中序遍历序列是 b, d, a, e, g, c, f,则 F 中的树的棵树是:(3

2-48
若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是:(200

2-49
对一棵二叉树的结点从 1 开始顺序编号。要求每个结点的编号小于其左、右孩子的编号,且左孩子的编号小于右孩子的编号。可采用 (先序遍历)实现编号。

多选题

以下说法错误的是( )。
A.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点
C.已知二叉树的前序遍历和后序遍历序列并不能唯一确定这棵树,因为不知道树的根结点是哪一个。
D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点之后。

程序填空题

下列代码的功能是将二叉树T中的结点按照层序遍历的顺序输出。

typedef struct TreeNode* Tree;
struct TreeNode
{
	int Key;
	Tree Left;
	Tree Right;
};

void Level_order(Tree T)
{
	Queue Q;

	if (!T) return;
	Q = CreateQueue(MaxElements);
	Enqueue(T, Q);
	while (!IsEmpty(Q)) {
		T = Front_Dequeue(Q); /* return the front element and delete it from Q */
		printf("%d ", T->Key);
		if (T->Left)
			@@ Enqueue(T->Left, Q) @@;
		if (@@ T->Right @@)
			@@ Enqueue(T->Right, Q) @@;
	}
}

下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。

typedef struct TreeNode *BinTree;
struct TreeNode
{
   int Key;
   BinTree  Left;
   BinTree  Right;
};

int Width( BinTree T )
{
   BinTree  p;
   Queue Q;
   int Last, temp_width, max_width;
   
   temp_width = max_width = 0;
   Q = CreateQueue(MaxElements);
   Last = Queue_rear(Q);
   if ( T == NULL) return 0;
   else {
      Enqueue(T, Q);
      while (!IsEmpty(Q)) {
         p = Front_Dequeue(Q); 
         @@ temp_width++ @@;
         if (p->Left != NULL)  Enqueue(p->Left, Q);
         @@if (p->Right != NULL)  Enqueue(p->Right, Q) @@;
         if (Queue_front(Q) > Last) {
             Last = Queue_rear(Q);
             if (temp_width > max_width) max_width = temp_width;
             @@ temp_width=0 @@;
         } /* end-if */
      } /* end-while */
      return  max_width;
   } /* end-else */
}





  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微__凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值