• 20182318 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结


    20182318 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

    教材学习内容总结

    第十六章 树

    1. 树是非线性结构,其元素组织为一个层次结构
    2. 树的度表示树中的任意结点的最大子结点数
    3. 有m个元素的平衡n叉树的高度是lognm
    4. 树的遍历有4种方法
    5. 进行层序遍历时可采用队列来储存树中的元素
    6. 使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置
    7. 树的基于数组的存储链实现方式可以占数组中的连续位置,不管树是不是完全树
    8. 如何在一般二叉树中添加及删除元素,要取决于树的用途
    9. 使用决策树可以设计专家系统

    第十七章

    • 两种序求第三种必须用中序
      使用递归遍历
    • 二叉树深度=左右子树最大深度+1
      用队列实现层序

    大顶堆、小顶堆

    • 必须是完全二叉树
    • 小顶堆:根必须小于等于左右孩子
    • 插入之后要重排序
      删除的位置用最后一片叶子代替
    • 建立:建立树,选择最后一个非终端节点,与其左右孩子的最值交换,重复操作。

    二叉排序树

    1. 将比根小的放左子树,大于等于放右子树。
    2. 查找中同理。子树为空查找失败。
    3. 中序遍历即可排序。
    4. 查找失败 将查找的数放入他应该再在的位置=生成。
    5. 删除若有双子树用前驱或后继结点代替之,再删除前驱或后继结点。
    6. 平衡因子不大于一即可。若左边多将左子树设为根左子树的右子树重排

    哈夫曼编码

    • 定长编码:长度一样
    • 概率大编码短,概率小编码长。
    • 任何编码都不是其他编码的前缀
    • 最优二叉树:带权路径长度最短或平均编码长度最小握
    • flush的应用和追加

    教材学习中的问题和解决过程

    问题1:删除根出现空指针异常。

    问题1解决方案:不能只改左右子树引用,其他的节点可以,但根还要改树的引用,即根结点。

    问题2:高度和深度究竟有什么区别?

    问题2解决方案

    • 高度是指当前结点到叶子结点的最长路径,如所有叶子结点的高度都为0。
    • 深度则是指从根结点到当前结点的最大路径长度,如根结点的深度为0。。

    问题3:最优二叉树有什么用

    问题3解决方案:哈夫曼编码,使编码更简洁,效率更高

    代码调试中的问题和解决过程

    • 问题1:在实现BSTNode的过程中,BSTNode find (T target)的相关内容总是出红字。而与此相对的,BTNode中的BTNode find (T target)就没有任何的问题

    • 问题1解决方案:经过反复细心检查,发现是自己打错了,书上代码并没有错误。

    • 问题2:如何打出二叉树的图形

    • 问题2解决方案:开始没什么思路,上网查了之后,用迭代器和循环就可以解决

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 错题1及原因( 单选题 | 1 分)
      In an array implementation of a binary tree, the root of the tree is in position 0, and for each node n, n’s left child is in position ________ and n’s right child is in position ________.

    A
    .
    2n + 1

    B
    .
    2n + 2

    C .
    2(n + 1)

    D
    .
    A and B

    E
    .
    A and C

    F
    .
    B and C
    正确答案:E
    解析:在二叉树的数组实现中,树的根在位置0,对于每个节点n, n的左子结点在位置,n的右子结点在位置A and C

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20182333
        20182317
      • 结对照片
      • 结对学习内容
        二叉树的遍历,排序,堆排序

    其他(感悟、思考等,可选)

    时间越来越紧张,各科的作业也越来越多。Java难度也渐渐加大了,必须要加强自主学习。真东西是等不来,抄不来的,相信在王老师英明的带领下,我们会越学越好。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    第九周 3577/1000 3/7 22/60

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:24小时

    • 实际学习时间:20小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    C# 字典 Dictionary 转 JSON 格式遍历
    jquery-easyui-tree异步树
    android 开发环境搭建
    解决android sdk 无法更新
    043——VUE中组件之使用.sync修饰符与computed计算属性实现购物车原理
    laravel中数据库迁移的使用:
    002PHP文件处理——文件处理 is_dir mkdir getcwd chdir rmdir
    001PHP文件处理——文件处理disk_total_space disk_free_space basename dirname file_exists filetype
    042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
    041——VUE中组件之pros数据的多种验证机制实例详解
  • 原文地址:https://www.cnblogs.com/1400694592qq/p/11892744.html
Copyright © 2020-2023  润新知