树练习题(答案)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、假定一棵三叉树的结点数为50,则它的最小高度为( )。(根为第0层)
A. 3B.4C. 5D. 6
4、在一棵二叉树上第3层的结点数最多为( )(根为第0层)。
A. 2B.4C. 6D. 8
5、用顺序存储的方法将完全二叉树中的所有结点逐层存放在数组中R[1..n],结点R[i]若有左孩子,其左孩子的编号为结点( )。(若存放在R[0..n-1]则左孩子R[2i+1])
7. 满二叉树也是完全二叉树。(1)
8. 哈夫曼树一定是完全二叉树。(0)
9. 树的子树是无序的。(0)
10.度小于等于2的有序树即为二叉树。(0)
三、填空题
1、由带权为3,9,6,2,5的5个叶子结点构成一棵哈夫曼树,则带权路径长度为_55__。
2、在一棵二叉排序树上按中序遍历得到的结点序列是一个有序序列。
};
//二叉树先序遍历递归算法
void BTree::PreOrder(Node* r) {
if(r!=NULL) {
cout<<r->data;
PreOrder(r->lChild);
PreOrder(r->rChild);
}
}
//二叉树中序遍历递归算法
void BTree::InOrder(Node* r,) {
2. 假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请写出该二叉树的后序遍历序列。
后序:ACDBGJKIHFE
3.若有字符a,b,c,d,e,f,g,h的频度权值分别为(30,5,9,11,15,2,7,16),试为这组字符设计哈弗曼编码。
哈弗曼编码:a:01 b:00001 c:100 d:101 e:001 f:00000 g:0001 h:11
if(r!=NULL) {
InOrder(r->lChildt);
cout<<r->data;
InOrder(r->rChild);
}
}
//二叉树后序遍历递归算法
void BTree::PostOrder(Node* r,) {
if(r!=NULL) {
PostOrder(r->lChild);
PostOrder(r->rChild;
6、由三个结点构成的二叉树,共有5种不同的形态。
7、设高度为h的二叉树中只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为2h+1。(根的高度为1)
8、对于一棵具有n个结点的二叉树,若一个结点的编号为i(0≤i≤n-1),则它的左孩子结点的编号为2i+1,右孩子结点的编号为2i+2,双亲结点的编号为(i-1)/2。
15、根据先序序列ABDEC和中序序列BDEAC确定对应的二叉树,该二叉树()。
A.是完全二叉树但不是满二叉树B.不是完全二叉树
C.是满二叉树D.不能确定
16、对任何一棵二叉树T,设N0、N1、N2分别是度数为0、1、2的结点数,则下列判断正确的是()。
A.N0=N2+1B.N1=N0+1C.N2=N0+1D.N2=N1+1
10、下面叙述正确的是( )。
A. 二叉树不是树
B. 二叉树等价于度为2的树
C. 完全二叉树必为满二叉树
D. 二叉树的左右子树有次序之分
11、任何一棵二叉树的叶子结点在先序、中序和后序遍历序列中的相对次序( )。
A. 不发生改变 B. 发生改变
C. 不能确定D. 以上都不对
12、已知一棵完全二叉树的结点总数为9个,则最后一层的结点数为( )。
五、算法设计题
按照以下树的定义,完成数类中的以下成员函数的编写。
(1)void PreOrder(Node* r)); //先序遍历的递归算法
(2)void InOrder(Node* r)); //中序遍历的递归算法
(3)void PostOrder(Node* r)); //后序遍历的递归算法
(4)int High(Node* bt); //求二叉树高度的递归算法
二、判断题
1. 二叉树中每个结点的度不能超过2。(1)
2. 二叉树的前序遍历中,任意结点均处在其子女结点之前。(1)
3. 哈夫曼树的总结点个数(多于1时)不能为偶数。(1)
4. 由二叉树的先序序列和后序序列可以唯一确定一颗二叉树。(0)
5. 树的后序遍历与其对应的二叉树的中序遍历序列相同。(0)
6. 根据任意一种遍历序列即可唯一确定对应的二叉树。(0)
#include <iostream>
#define MaxSize 100
struct Node{
Node *lChild;//左子树指针
Node *rChild;//右子树指针
DataType data;
};
class BTree {
private:
Node* root;
public:
BTree(); //构造函数
A. 1B.2C. 3D. 4
13、下列图示的顺序存储结构表示的二叉树是( )。
0
1
2
3
4
5
6
7
8
9
10
11
12
A
B
C
D
E
F
A.B.C.D.
14、设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树一定满足的条件是()。
A.空或只有一个结点B.高度等于其结点数
C.任一结点无左孩子D.任一结点无右孩子
void PreOrder(Node* r)); //先序遍历的递归算法
void InOrder(Node* r)); //中序遍历的递归算法
void PostOrder(Node* r)); //后序遍历的递归算法
int High(Node* bt); //求二叉树高度的递归算法
int NodeNum(Node* bt); //求二叉树结点数目
A. R[2i+1]B. R[2i]C. R[i/2]D. R[2i-1]
6、将含100个结点的完全二叉树,按照从上层到下层、同层从左到右的次序依次给它们编以从0开始的连续自然数,则编号为40的结点X的双亲的编号为( )。
A.19B.20 C. 21 D.39
7、由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。
cout<<r->data;
}
}
//求二叉树的高度
int BTree::High(Node* r) {
int lh,rh;
if(r == NULL) return 0;
elsLeabharlann Baidu {
lh = High(r->lChild);
rh = High(r->rChild);
if(lh>rh) return lh+1;
A. 24B.48C. 72D. 53
8、设n , m 为一棵二叉树上的两个结点,在中序遍历序列中n在m前的条件是( )。
A. n在m右方B. n在m 左方
C. n是m的祖先D. n是m的子孙
9、如果F是由有序树T转换而来的二叉树,那么T中结点的前序就是F中结点的( )。
A. 中序B. 前序C. 后序D. 层次序
else return rh+1;
}
}
9、假设一棵二叉树的先序序列为ABCEDFG,中序序列为AECBFDG,则该二叉树的层序遍历序列中结点E的直接前驱是结点F。
四、
1. 已知用一维数组存放的一棵完全二叉树:ABCDEFGHIJKL,写出该二叉树的先序、中序和后序遍历序列。
先序:ABDHIEJKCFLG
中序:HDIBJEKALFCG
后序:HIDJKEBLFGCA
3、对于一棵具有n个结点的二叉树,当进行链接存储时,其二叉链表中的指针域的总数为2n个,其中n-1个用于链接孩子结点,n+1个空闲着。
4、在一棵二叉树中,度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+1。
5、一棵深度为k的满二叉树的结点总数为2k-1,一棵深度为k的完全二叉树的结点总数的最小值为2k-1,最大值为2k。(根的深度为1)
《树》练习题
一、单项选择题
1、在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为( )个。
A. 4B.5C. 6D. 7
2、假设在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。
A. 15B.16C. 17D. 47
相关文档
最新文档