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

教材学习内容总结

    • 树是一种非线性结构。树由一个包含结点和边的集构成,其中的元素被存储在这些结点中,边则将一个结点和另一个结点连接起来。
    • 树的根就是位于该树顶层的唯一结点。一棵树只有一个结点。位于树中较低层的结点是上一层结点的孩子。一个结点只有一个双亲,但是可有多个孩子。
    • 根结点是树中唯一一个没有双亲的结点。没有任何孩子的结点为叶子。一个至少有一个孩子的非根结点为一个内部结点。
    • 根是树中所有结点的最终祖先,沿着起始自某一特定结点的路径可以到达的结点是该结点的子孙。
    • 通过计算从根到该结点所必须越过的边数目,可确定路径长度。树的高度是指从根到叶子之间最远路径的长度。
  • 树的分类:
    • 一种是树中任一结点可以具有的最大孩子数目。这个值有时称为该树的度。所含孩子无限为广义树;每个结点限制为不超过n个孩子的树称为n元树。最多两个孩子的叫二叉树。
    • 另一种是该树平衡与否。如果树的所有叶子都位于同一层或至少是彼此相差不超过一个层,就称之为平衡的。
    • 完全树是如果某树是平衡的,且底层所有叶子都位于树的左边,则是完全的
    • 满树是如果一棵n元树的所有叶子都位于同一层且每一结点要么是一片叶子要么正好具有n个孩子,则称树是满的。
  • 实现树的策略
    • 对于任何存储在数组位置n处的元素而言,该元素的左孩子将存储在位置2n+1处,右孩子将存储在位置2(n+1)处。一般我们会将根结点放在索引0处,比较方便。但是通过看书发现这个有缺陷,因为如果其中一层缺少左或者右孩子,这样就会出现没有用的存储空间,而这部分空间是浪费掉的。
    • 一般而言,一棵含有m个元素的平衡n元树具有的高度为logn m。随着n增加,树的效率会越来越好。原因是因为,n变多,线性结构的最坏的情况所需的时间会越多,但是就树而言,即使在最坏的情况下,查找一条从根到叶子的路径,该路径不会长于logn m。
  • 树的遍历
    • 前序遍历:从根结点开始,访问每一结点及其孩子。
    • 中序遍历:从根结点开始,访问结点的左孩子,然后是该结点,再然后是任何剩余结点。
    • 后序遍历:从根结点开始,访问结点的孩子,然后是该结点。
    • 层序遍历:从根结点开始,访问每一层的所有结点,一次一层。
  • 二叉树
    • 将符号和数字都存储到结点,然后利用递归进行一次又一次的操作。
    • 其结点表示决策点,其子结点表示在该决策点的可选项。对于问题,左子结点表示“否”,右子结点表示“是”。

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

  • 问题1:怎样实现从子结点返回到根结点?或者说建立虚空结点树的时候,遇到#返回null以后怎么回到根节点重新赋值?
  • 问题1解决方案:递归的思想其实就包括返回上一级,所以直接使用递归就能
  • 问题2:关于完全二叉树已知结点数n,求层数h,叶子结点数n0。
  • 问题2解决方案:完全二叉树除h层外,1~h-1层均为一个父节点对应两个子节点(满二叉树),所以对n进行计算log2n,计算得数向上取整即为h。

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

  • 问题1:返回空指针异常和0>1错误
  • 问题1解决方案:规定search方法未找到元素返回-1,造成copyOf里面会出现(0,1)的情况。把未找到元素的返回值设置为1即可。
  • 问题2:tostring出现错误

-问题2解决方法:

代码托管

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分)

  2. 模板中的要素齐全(加1分)

  3. 教材学习中的问题和解决过程, 3个问题加3分

  4. 代码调试中的问题和解决过程, 2个问题加2分

  5. 本周有效代码超过300分行的(加2分)

  6. 感想,体会不假大空的加1分

  7. 排版精美的加一分

  8. 进度条中记录学习时间与改进情况的加1分

  9. 有动手写新代码的加1分

  10. 课后选择题有验证的加1分

  11. 错题学习深入的加1分

  12. 点评认真,能指出博客和代码中的问题的加1分

  13. 结对学习情况真实可信的加1分

点评模板:

  • 博客中值得学习的或问题:

    • 排版很好
  • 代码中值得学习的或问题:

    • 代码增长量多,说明结对的同学这周很努力的在学习Java,我也要努力学习Java了
    • 仓库有点混乱
  • 参考示例

点评过的同学博客和代码

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 1526/2986 2/9 20/115
第六周 837/3823 2/11 20/135
第六周 837/3823 2/13 20/135
第七周 1639/5462 2/15 20/155
第八周 1233/6695 2/17 20/175
第九周 1654/8349 2/19 20/195
  • 计划学习时间:20小时

  • 实际学习时间:20小时

参考资料