数据结构第5章练习答案(PTA)

这篇具有很好参考价值的文章主要介绍了数据结构第5章练习答案(PTA)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单选题

2-1以下说法错误的是(A

A.树形结构的特点是一个结点可以有多个直接前趋

B.线性结构中的一个结点至多只有一个直接后继

C.树形结构可以表达(组织)更复杂的数据

D.树(及一切树形结构)是一种"分支层次"结构

E.任何只含一个结点的集合是一棵树

2-2利用二叉链表存储树,则根结点的右指针是(C

A.指向最左孩子

B.指向最右孩子

C.空

D.非空

2-3已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为(A

A.CBEFDA

B.FEDCBA

C.CBEDFA

D.不定

2-4下面几个符号串编码集合中,不是前缀编码的是(B

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-5一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是(D

A.A[2i](2i<=n)

B.A[2i+1](2i+1<=n)

C.A[i-2]

D.条件不充分,无法确定

2-6以下说法错误的是(C

A.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。

C.已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。

D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之后。

2-7在二叉树的二叉链表结构中,指针p所指结点为叶子结点的条件是(B

A.p=NULL

B.p->lchild==NULL && p->rchlid==NULL

C.p->lchild==NULL

D.p->rchlid==NULL

2-8深度为k的完全二叉树至少有(1)个结点,至多有(2)个结点。(D

A.

B.

C.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

D.

2-9高度为8的完全二叉树至少有(C)个叶子结点。

A.128        B.63        C.64        D.32

2-10二叉树的先序序列和中序序列相同的条件是(B

A.任何结点至多只有左子女的二叉树

B.任何结点至多只有右子女的二叉树

C.右子树为空

D.左子树为空

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

A.M1        B.M1+M2        C.M3        D.M2+M3

2-12一棵完全二叉树上有1001个结点,其中叶子结点的个数是(D)。

A.250        B.500        C.254        D.501

2-13设给定权值总数有n 个,其哈夫曼树的结点总数为(D

A.不确定        B.2n        C.2n+1        D.2n-1

2-14一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有(B)结点。

A.2h        B.2h-1        C.2h+1        D.h+1

2-15在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序(B)。

A.都不相同

B.完全相同

C.先序和中序相同,而与后序不同

D.中序和后序相同,而与先序不同

2-16在完全二叉树中,若一个结点是叶结点,则它没(C)。

A.左子结点

B.右子结点

C.左子结点和右子结点

D.左子结点,右子结点和兄弟结点

2-17一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是(B)。 

A.        B.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法        C.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法        D.

2-18将下列由三棵树组成的森林转换为二叉树,正确的结果是(A)。

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

 A.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法        B.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法        C.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法        D.程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

2-19设有正文ADDBCBDCCBDCAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。正确的哈夫曼树(要求左孩子权值小于等于右孩子)以及编码是(D)。

A.  A:010 B:011 C:1 D:00

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

B.  A:011 B:111 C:01 D:0

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

 C.  A:00 B:01 C:0 D:1

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

 D.  A:00 B:01 C:10 D:11

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

2-20设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有(C)个。

A.n−1        B.n        C.n+1        D.n+2

程序填空题

5-1计算二叉树中度为1的结点个数

统计二叉树度为1的结点个数。

#include<iostream>
using namespace std;
typedef struct BiNode{                
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree &T){    
    char ch;
    cin >> ch;
    if(ch=='#')  T=NULL;            
    else{                            
        T=new BiTNode;
        T->data=ch;                
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

int NodeCount ( BiTree T)
{ 
 if(_______________2 分) return 0;
 if(T->lchild==NULL&&T->rchild!=NULL)
  return _______________2 分;
 if(T->lchild!=NULL&&T->rchild==NULL)
  return _______________3 分;
  ______________________3 分;
 }

int main(){
    BiTree T;
    CreateBiTree(T);
    printf("%d", NodeCount(T));
    return 0;
}

输入样例1:

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

AB#DF##G##C##

输出样例1:

1

参考答案:

(1)T==NULL
(2)1+NodeCount(T->rchild)
(3)1+NodeCount(T->lchild)
(4)return NodeCount(T->rchild)+NodeCount(T->lchild)

5-2 计算二叉树深度

计算二叉树深度。

#include<iostream>
using namespace std;

typedef struct BiNode
{                
    char data;                    
    struct BiNode *lchild,*rchild;    
}BiTNode,*BiTree;


void CreateBiTree(BiTree &T)
{    
    char ch;
    cin >> ch;
    if(ch=='#')  T=NULL;            
    else{                            
        T=new BiTNode;
        T->data=ch;                    
        CreateBiTree(T->lchild);    
        CreateBiTree(T->rchild);    
    }                                
}                                

int Depth(BiTree T)
{ 
    int m,n;
    if(___________________2 分) return 0;        
    else 
    {                            
        ___________________3 分;            
        ___________________3 分;            
        if(m>n) return(m+1);        
        else return (n+1);
    }
}

int main()
{
    BiTree tree;
    CreateBiTree(tree);
    cout<<Depth(tree);
    return 0;

}

参考答案:

(1)T==NULL
(2)m=Depth(T->lchild)
(3)n=Depth(T->rchild)

5-3创建哈夫曼树

创建哈夫曼树。

#include<cstring>
#include<iostream>
using namespace std; 

typedef struct
{    
    int weight;
    int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;


void Select(HuffmanTree HT,int len,int &s1,int &s2)
{
    int i,min1=32767,min2=32767;
    for(i=1;i<=len;i++)
    {
        if(HT[i].weight<min1&&HT[i].parent==0)
        {
            s2=s1;
            min2=min1;
            min1=HT[i].weight;
            s1=i;
        }
        else if(HT[i].weight<min2&&HT[i].parent==0)
        {    min2=HT[i].weight;
            s2=i;
        }
    }
}

void CreatHuffmanTree(HuffmanTree &HT,int n)
{
    int m,s1,s2,i;
    if(n<=1) return;
    m=2*n-1;
    HT=new HTNode[m+1];
    for(i=1;i<=m;++i)              
       { HT[i].parent=0;  HT[i].lchild=0;  HT[i].rchild=0; }
    for(i=1;i<=n;++i)        
        cin >> HT[i].weight;
    for(i=n+1;i<=m;++i) 
    {      
        ___________________2 分;
        HT[s1].parent=________2 分;
        HT[s2].parent=________2 分;
        HT[i].lchild=_________2 分;    
        HT[i].rchild=_________2 分;                       
        HT[i].weight=___________________2 分;
    }                                            
}    


void print(HuffmanTree HT,int n)
{
    for(int i=1;i<=2*n-1;i++)
        cout << HT[i].weight << " " << HT[i].parent << " " << HT[i].lchild  << " " << HT[i].rchild << endl;
}


int main()
{
    HuffmanTree HT;
    int n;
    cin >> n;
    CreatHuffmanTree(HT,n);
    print(HT,n);
    return 0;
}

参考答案:

(1)Select(HT,i-1,s1,s2);
(2)i
(3)i
(4)s1
(5)s2
(6)HT[s1].weight + HT[s2].weight

函数题 

6-1 二叉树的遍历

输入二叉树的先序遍历序列,以#代表空树,输出该二叉树的中序遍历序列。例如,有如下二叉树,其先序序列为:ABC##DE#G##F###,输出其中序序列:CBEGDFA

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

 二叉树采用二叉链表存储结构,其定义为:

typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;

函数接口定义:

void InOrder(BiTree Tree)//中序遍历
void creat(BiTree &Tree)//构建二叉树

其中, Tree 是用户传入的参数,为指向二叉树根节点的指针。

裁判测试程序样例:

#include<stdio.h>
#include<malloc.h>
#define len sizeof(struct BiTNode )

typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;
void InOrder(BiTree Tree);
 void creat(BiTree &Tree);
int main()
{
    BiTree Tree;
    creat(Tree);//创建二叉树
    InOrder(Tree);//中序遍历
    return 0;
}

/* 请在这里填写答案 */

输入样例:

ABC##DE#G##F###

输出样例:

CBEGDFA

参考答案:

void InOrder(BiTree Tree)
{
    if(Tree!= NULL)
    {
        InOrder(Tree->lchild);//先访问左结点
        printf("%c",Tree->data);
        InOrder(Tree->rchild);//最后访问右结点
    }
    return;
}
void creat(BiTree &Tree)
{
    char val;
    scanf("%c",&val);
    if(val=='#')
    {
        Tree=NULL;
        return;
    }
    Tree=(BiTNode *)malloc(sizeof(BiTNode));
    Tree->data=val;
    Tree->lchild=NULL;
    Tree->rchild=NULL;
    creat(Tree->lchild);
    creat(Tree->rchild);
}

 6-2 表达式中运算数计数(二叉树的遍历)

请编写程序,实现统计二叉树表示的表达式中操作数的个数。例如,下图表示:A-F*G+C,其中运算数共有4个。(提示:运算数均在叶子结点上,叶子结点数即为运算数个数)

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

 函数接口定义:

BiTree Create();
/*按先序输入创建一棵二叉树,返回二叉树根节点指针。*/
int OperandCount(BiTree T);
/*T是二叉树树根指针,函数OperandCount返回二叉树中操作数的个数,若树为空,则返回0。题目保证所给二叉树一定是正确的表达式。*/

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree Create();
int OperandCount ( BiTree T);

int main()
{
    BiTree T; 
    T = Create();    
    printf("%d\n", OperandCount(T));
    return 0;
}
/* 请根据下面提示,补充横线上的代码,并把两个函数的完整部分复制到答题框内 */
BiTree Create(){
    char ch;
    BiTree T;
    scanf("%c",&ch);   
    if(ch=='#') 
        ____________________________;//若输入字符为#,则该树为空
    else{
        T=(BiTree)malloc(sizeof(BiTNode));   //创建一个新结点T
        ____________________; //给新结点的数据域赋值                 
        T->lchild=Create();   
    __________________________;//创建右子树
    }
    return T;
}
int OperandCount(BiTree T){
    if(T==NULL) 
         ___________________; //若树为空则个数为0
    if(_______________________)//若根节点为叶子结点
          return 1;
    else 
        return _______________________________;  //否则返回左右子树上叶子结点之和
}

/* 请在这里填写答案 */

输入样例:

程序填空题创建二叉树#include<iostreamm> using namespace std; typedef struct,数据结构练习,数据结构,c++,算法

对于上图所示的二叉树,输入数据为扩展的先序序列:
+-A##*F##G##C##文章来源地址https://www.toymoban.com/news/detail-766301.html

+-A##*F##G##C##

输出样例:

4

参考答案:

BiTree Create(){
    char ch;
    BiTree T;
    scanf("%c",&ch);
    if(ch=='#') T=NULL;
    else{
        T=(BiTree)malloc(sizeof(BiTNode));   //创建一个新结点T
        T->data=ch; //给新结点的数据域赋值                 
        T->lchild=Create();   
        T->rchild=Create();//创建右子树
    }
    return T;
}
int OperandCount(BiTree T){
    if(T==NULL) return 0; //若树为空则个数为0
    if(T->lchild==NULL and T->rchild==NULL) return 1;//若根节点为叶子结点
    else return OperandCount(T->lchild)+OperandCount(T->rchild);//否则返回左右子树上叶子结点之和
}

到了这里,关于数据结构第5章练习答案(PTA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据清洗(黑马程序员)课后题答案选择填空判断

    一、填空题 1.对原始数据进行有效的 __ 清洗 ___ 是大数据分析和应用过程中的关键环节。 2.数据质量的评价指标有准确性 ___ 完整性 _____、简洁性、___ 适用性 _____。 3.数据质量的问题可以分为两类,分别是__ 基于数据源的脏数据分类 ___________和基于清洗方式的脏数据分类

    2024年02月03日
    浏览(47)
  • 《数据结构》_PTA_数据结构作业6:图

    1-1 无向连通图所有顶点的度之和为偶数。 T 1-2 无向连通图边数一定大于顶点个数减1 F 1-3 无向连通图至少有一个顶点的度为1。 F 1-4 用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关. F 1-5 用邻接矩阵法存储图,占用的存储空间数只与图中结点个数

    2024年02月04日
    浏览(56)
  • 数据结构与算法--pta复习

    拓扑序一定是唯一的 F 如果从有向图 G 的每一点均能通过深度优先搜索遍历到所有其它顶点,那么该图一定不存在拓扑序列 T AOE图的权值最大的边(活动)一定是关键活动  F 在关键路径上的活动都是关键活动,而关键活动也必在关键路径上。T 关键路径是AOE网中从源点到汇

    2024年01月16日
    浏览(45)
  • 7-1 天梯地图 (PTA-数据结构)

    本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数 N (2 ≤

    2024年02月02日
    浏览(45)
  • 7-1 抢红包(PTA - 数据结构)

    没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。 输入格式: 输入第一行给出一个正整数N(≤104),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:

    2024年01月23日
    浏览(42)
  • 数据结构Pta训练题-编程2

    感谢你这么帅(漂亮)​还支持我 一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。 输入

    2024年02月16日
    浏览(51)
  • 数据结构Pta训练题函数题详解

    感谢你这么帅(漂亮)​还支持我 pta网站:PTA | 程序设计类实验辅助教学平台 (pintia.cn) 文章内容较长,建议搭配目录使用 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。 函数接

    2024年02月12日
    浏览(50)
  • 数据结构pta训练题-编程题1

    感谢你这么帅(漂亮)​还支持我 训练网站:PTA训练平台 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

    2024年02月10日
    浏览(43)
  • 7-1 回文判断(数据结构) PTA C语言

    回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。 若用C++,可借助STL的容器实现。 输入格式: 输入待判断的字符序列,按回车键结束,字符序列长度20。 输出格式: 若字符序列是

    2024年02月02日
    浏览(46)
  • C/C++数据结构---单链表逆转(PTA)

    个人主页: 仍有未知等待探索_数据结构,C语言疑难,小项目-CSDN博客 专题分栏: 数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、前言 二、题目 函数接口定义: 裁判测试程序样例: 输出样例: 三、理解+代码 1.理解 2.分析  3.代码          对于初次学习数据结构,

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包