第04次作业-树

1.学习总结

1.1树结构思维导图

 

1.2 树结构学习体会

1.是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合,它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树.

2.困难:对树的算法的代码化比较吃力。

3.可解决的问题:求解哈尔曼编码以及并查集解决等价问题等。

2.PTA实验作业

2.1 题目1:6-1 jmu-ds-二叉树操作集

2.2 设计思路(伪代码或流程图)

创建树BT;

定义变量j,定义队列q;

If 字符串不为空

创建新结点;

将数据传入结点;

左右孩子清零后入队;

else 树为空;

end if;

while 队列不为空

取队顶元素后入队;

J++

If 遇到‘#’

 左孩子为空

Else

创建新结点;

将数据传入结点;

左右孩子清零后入队;

End if;

J++;

If 遇到‘#’

 右孩子为空

else

创建新结点;

将数据传入结点;

左右孩子清零后入队;

end while;

2.3 代码截图

 

2.4 PTA提交列表说明。

 

发现输出后格式错误,请教同学后发现可以用静态变量来控制空格的有无,加上后就通过了。

 

2.1 题目2:6-4 jmu-ds-表达式树

2.2 设计思路(伪代码或流程图)

创建二叉树;

创建栈t放数字;

创建栈q放运算符;

让第一个字符入栈;

While 字符串不为空

 If 不是运算符

  创建新节点T;

  赋值并使左右孩子清空然后入栈;

Else 判断顶部元素与字符串第j个字符的大小关系

    If 小于 入栈;

    If 等于 访问栈顶;

    If 大于 创建新节点;

           将栈顶元素赋值给T;

           左右孩子为栈顶元素

           T入栈t;

           访问栈q栈顶;

     End if;

    End while;

    While q栈顶元素不为#

       创建新节点并给q栈顶元素赋值

        右孩子为t栈顶元素

          If t不为空

            左孩子为t栈顶

             再次访问栈顶

          End if

         T入栈t;

         访问q栈顶元素

      End while;

表达式的值

 设置变量sum,x,y;

 If 左右子树结尾为空

 返回0

  递归使用a,b还未计算的下层元素

 Switch T的值不为空

+ - * /分别返回相应值(‘/’时若y为0,返回错误提醒;)

End if;

2.3 代码截图

 

2.4 PTA提交列表说明。

 

提交完发现编译错误,检查完发现代码中多打了几个符号,修改后通过。

 

2.1 题目3:7-2 根据后序和中序遍历输出先序遍历

2.2 设计思路(伪代码或流程图)

定义2个数组;

定义变量n,I,j;

For i=0 to n

 输入后序遍历的数

For i=0 to n

输入中序遍历的数

 调用递归函数

 当遇到根结点时弹出

  输出根结点的值

  递归左子树

  递归右子树

2.3 代码截图

 

2.4 PTA提交列表说明。

提交后发现段错误,请教后发现原来是递归函数不严谨出现问题,经修改后成功通过

 

3.截图本周题目集的PTA最后排名

本次题目集总分:285
必做题共:230分

3.1 PTA排名截图

 

3.2 我的总分:2分

4. 阅读代码(必做)

 代码地址:https://gitee.com/changkong569/DataStructure/blob/master/Tree/BPlus/TestBPlusTree.cpp

本篇代码简洁明了,适合初学者阅读。

5. 代码Git提交记录截图

 

 

 

 

          

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zhuxinying/p/8995709.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 一棵二叉的顺序存储情况如下: 中,度为2的结点数为( )。 A.1 B.2 C.3 D.4 2. 一棵“完全二叉”结点数为25,高度为( )。 A.4 B.5 C.6 D.不确定 3.下列说法中,( )是正确的。 A. 二叉就是度为2的 B. 二叉中不存在度大于2的结点 C. 二叉是有序 D. 二叉中每个结点的度为2 4.一棵二叉的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( )。 A. CABDEFG B. BCDAEFG C. DACEFBG D. ADBCFEG 5.线索二叉中的线索指的是( )。 A.左孩子 B.遍历 C.指针 D.标志 6. 建立线索二叉的目的是( )。 A. 方便查找某结点的前驱或后继 B. 方便二叉的插入与删除 C. 方便查找某结点的双亲 D. 使二叉的遍历结果唯一 7. 有abc三个结点的右单枝二叉的顺序存储结构应该用( )示意。 A. a b c B. a b ^ c C. a b ^ ^ c D. a ^ b ^ ^ ^ c 8. 一颗有2046个结点的完全二叉的第10层上共有( )个结点。 A. 511 B. 512 C. 1023 D. 1024 9. 一棵完全二叉一定是一棵( )。 A. 平衡二叉 B. 二叉排序 C. 堆 D. 哈夫曼 10.某二叉的中序遍历序列和后序遍历序列正好相反,则该二叉一定是( )的二叉。 A.空或只有一个结点 B.高度等于其结点数 C.任一结点无左孩子 D.任一结点无右孩子 11.一棵二叉的顺序存储情况如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D E 0 F 0 0 G H 0 0 0 X 结点D的左孩子结点为( )。 A.E B.C C.F D.没有 12.一棵“完全二叉”结点数为25,高度为( )。 A.4 B.5 C.6 D.不确定 二、填空题(每空3分,共18分)。 1. 的路径长度:是从根到每个结点的路径长度之和。对结点数相同的来说,路径长度最短的是 完全 二叉。 2. 在有n个叶子结点的哈夫曼中,总结点数是 2n-1 。 3. 在有n个结点的二叉链表中,值为非空的链域的个数为 n-1 。 4. 某二叉的中序遍历序列和后序遍历序列正好相反,则该二叉一定是 任一结点无左孩子 的二叉。 5. 深度为 k 的二叉最多有 个结点,最少有 k 个结点。 三、综合题(共58分)。 1. 假定字符集{a,b,c,d,e,f }中的字符在电码中出现的数如下: 字符 a b c d e f 频度 9 12 20 23 15 5 构造一棵哈夫曼(6分),给出每个字符的哈夫曼编码(4分),并计算哈夫曼的加权路径长度WPL(2分)。 (符合WPL最小的为哈夫曼,答案不唯一) 哈夫曼编码: 2. 假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字符构成,它们在电文中出现的频率分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04}。要求: (1)为这7个字符设计哈夫曼(6分)。 (2)据此哈夫曼设计哈夫曼编码(4分)。 (3)假设电文的长度为100字符,使用哈夫曼编码比使用3位二进制数等长编码使电文总长压缩多少?(4分) (1) 为这7个字符设计哈夫曼为(符合WPL最小的为哈夫曼,答案不唯一): (2) 哈夫曼编码为: a:01;b:001;c:100;d:0001;e:101;f:11;g:0000 (3) 假设电文的长度为100字符,使用哈夫曼编码比使用3位二进制数等长编码使电文总长压缩多少? 采用等长码,100个字符需要300位二进制数,采用哈夫曼编码发送这100个字符需要261二进制位,压缩了300-261=39个字符。压缩比为39/300=13%。 3. 二叉数T的(双亲到孩子的)边集为: { <A,B>, <A,C>, <D,A>, <D,E>, <E,F>, <F,G> } 请回答下列问题: (1)T的根结点(2分): (2)T的叶结点(2分): (3)T的深度(2分): (4)如果上述列出边集中,某个结点只有一个孩子时,为其左孩子;某个结点有两个孩子时,则先列出了连接左孩子的边后列出了连接右孩子的边。画出该二叉其及前序线索(6分)。 (1)T的根结点 (2)T的叶结点 : (3)T的深度 : (4)该二叉其及前序线索为: 4.现有以下按前序和中序遍历二叉的结果: 前序:ABCEDFGHI 中序:CEBGFHDAI 画出该二叉的逻辑结构图(5分),并在图中加入中序线索(5分)。 5.有电文:ABCDBCDCBDDBACBCCFCDBBBEBB。 用Huffman构造电文中每一字符的最优通讯编码。画出构造的哈夫曼,并给出每个字符的哈夫曼编码方案。(符合WPL最小的为哈夫曼,答案不唯一) (1)构造哈夫曼(6分): (2)哈夫曼编码方案(4分):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值