数据结构练习(二叉树)
学号  31301374 姓名 张一博 班级 软件工程1301 .
一、选择题
1.按照二叉树定义,具有3个结点的二叉树共有  C 种形态。
    (A) 3      (B) 4        (C) 5        (D) 6         
2.具有五层结点的完全二叉树至少有    D  个结点。
    (A) 9      (B) 15      (C) 31        (D) 16         
3.以下有关二叉树的说法正确的是    B   
(A) 二叉树的度为2              (B)一棵二叉树的度可以小于
(C) 至少有一个结点的度为2      (D)任一结点的度均为2
4.已知二叉树的后序遍历是dabec,中序遍历是debac,则其前序遍历是    D                     
  Aacbed    Bdecab      (C)  deabc        (D) cedba   
5.将一棵有1000个结点的完全二叉树从上到下,从左到右依次进行编号,根结点的编号为1,则编号为49的结点的右孩子编号为    B 
(A) 98        (B) 99        (C) 50      (D) 没有右孩子
6.对具有100个结点的二叉树,若有二叉链表存储,则其指针域共有  D  为空。
(A) 50        (B) 99        (C) 100      (D) 101
7.设二叉树的深度为h,且只有度为10的结点,则此二叉树的结点总数为  C 
(A) 2h        (B) 2h-1      (C) h        (D) h+1
8.对一棵满二叉树,m个树叶,n个结点,深度为h,则    D 
(A) n=h+m      (B) h+m=2n    (C)m=h-1    (D)n=2h-1
9.某二叉树的先序序列和后序序列正好相反,则下列说法错误的是    A 
(A) 二叉树不存在
(B) 若二叉树不为空,则二叉树的深度等于结点数
(C) 若二叉树不为空,则任一结点不能同时拥有左孩子和右孩子
(D) 若二叉树不为空,则任一结点的度均为1
10.对二叉树的结点从1开始进行编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用  A  遍历实现编号。
(A) 先序      (B)中序    (C)后序      (D)层序
11.一个具有1025个结点的二叉树的高h  C 
(A) 10        (B)11        (C)11~1025    (D)10~1024
12.设n,m为一棵二叉树上的两个结点,在中序遍历时,nm前的条件是  C   
( A) nm右方            (B)nm祖先
(C) nm左方            (D) nm子孙
13.实现对任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用    C  存储结构。
(A) 二叉链表    (B) 广义表      (C)三叉链表      (D)顺序
14. 一棵树可转换成为与其对应的二叉树,则下面叙述正确的是  A       
(A) 树的先根遍历序列与其对应的二叉树的先序遍历相同
(B) 树的后根遍历序列与其对应的二叉树的后序遍历相同
(C) 树的先根遍历序列与其对应的二叉树的中序遍历相同
(D) 以上都不对
二、填空题
1.对一棵具有n个结点的二叉树,当它为一棵  完全 二叉树时具有最小高度;当它为单分支
二叉树  时,具有最大高度。
2.在二叉树的第ii1)层上至多有    2^(i-1)      个结点,深度为kk1)的完全二叉树至多    2^(k)-1    个结点,最少    2^(k-1)    个结点;
3.如果二叉树的终端结点数为n0,度为2的结点数为n2,则n0 =   n2+1       
4.已知一棵二叉树的中序序列是cbedahgijf后序序列是cedbhjigfa,则该二叉树的先序序列是  abcdefghij    ,该二叉树的深度为      5   
5.若一棵二叉树的中序遍历结果为ABC,则该二叉树有    3  中不同的形态。
6.在顺序存储的二叉树中,下标为ij的两个结点处在同一层的条件是 log(2)i=log(2)j      
7.已知完全二叉树的第7层有8个结点,则其叶子结点数为  36  个。总结点数为 71  个。
8.在对二叉树进行非递归中序遍历过程中,需要用      来暂存所访问结点的地址;进行层序遍历过程中,需要用    队列  来暂存所访问结点的地址;
9.高度为h,度为k的树中至少有    h+k-1    个结点,至多有    k^(h)-1    个结点。
10.一维数组存放完全二叉树:ABCDEFGHI,则后序遍历该二叉树的序列为 HIDEBFGCA         
三、应用题
1. 应用题:说明分别满足下列条件的二叉树各是什么?
⑴先序遍历和中序遍历相同;  空树,只有一个跟节点或右单分支二叉树。
⑵中序遍历和后序遍历相同;  空树,只有一个根节点或左单分支二叉树。
⑶先序遍历和后序遍历相同;  空树,只有一个根节点的二叉树。
2. 已知一棵二叉树的中序序列是cbedahgijf,后序序列是cedbhjigfa,画出这棵二叉树的逻辑结构图。
A                                  F
  B                          G
C    D                      H    I
        E                                J
3.一棵二叉树的先序、中序、后序序列如下,其中一部分未标出,试构造出该二叉树。
先序序列: A二叉树公式 B C D E F G H I J K
中序序列:C B E D F A H J K I G
后序序列: C E F D B K J I H G A
4.n个结点的二叉树,已知叶子结点个数为n0,回答下列问题:
(1)写出求度为1的结点的个数n1的计算公式;
(2)若此树是深度为k的完全二叉树,写出n为最小的公式;
(3)若二叉树中仅有度为0和度为2的结点,写出求该二叉树结点个数n的公式;
    1 n1=n+1-2n0
2 nmin=2^(k-1)
(3)  n=2n0-1
四、算法设计题
1.编写求二叉树BT中结点总数的算法。
int BTreeCount(BTreeNode *BT) //二叉树中结点的总数
{
    if(BT==NULL)
        return 0;
    else if(BT->left==NULL&&BT->right==NULL)
        return 1;
    else
      return BTreeCount(BT->left)+BTreeCount(BT->right)+1;
} 
2.编写求二叉树BT中叶子结点数的算法。
int BTreeCount(BTreeNode *BT) //二叉树中结点的总数
{
    if(BT==NULL)
        return 0;
    else if(BT->left==NULL&&BT->right==NULL)
        return 1;
    else
      return BTreeCount(BT->left)+BTreeCount(BT->right);
}
3.若已知两棵二叉树BT1BT2皆为空,或者皆不为空且BT1的左、右子树和BT2的左、右子树分别相似,则称二叉树BT1BT2相似。编写算法,判别给定的两棵二叉树是否相似。
int BTreeSim(BTreeNode *BT1,BTreeNode *BT1)
{
if(! BT1 && ! BT2) return 1;
else if(! BT1||! BT2) return 0;
else
return BTreeSim(BT1->lchild,BT2->lchile)&&BTreeSim(BT1->rchild,BT2->rchild);
}
4.编写算法,求二叉树中以元素值为x的结点为根的子树的深度。
int BTreeSim(BTreeNode *BT ,  ElemType x)
{
if(! BT)  return 0;
else if(BT->data==x) return DepthBTree(B)T;
else if(BT->lchild!=NULL) return Get_Sub_Depth(BT->lchild ,x);
else if(BT->rchild!=NULL) return Get_Sub_Depth(B)T->rchild,x;
else return 0;
}
int DepthBTree(BTreeNode *BT)  //求二叉树BT的深度
{
  if(!BT) return 0;
else{
  int dep1=DepthBTree(BT->lchild);
  int dep2=DepthBTree(BT->rchild);
  if(dep1>dep2)
    return dep1+1;
else
return dep2+1;
}
}
5.编写算法,计算二叉树中度为1的结点数和度为2的结点数。
int s1=0,s2=0;
void BTreebranch(BTreeNode *BT)
{
if(BT!=NULL){
if(BT->lchild!=NULL){
if(BT->rchild!=NULL)  s2++;
else s1 ++;
BTreebranch(BT->lchild);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。