20172301 《程序设计与数据结构》第六周学习总结

20172301 《程序设计与数据结构》第六周学习总结

教材学习内容总结

  • 树的概述
    • 树由一个包含结点的集构成。
  • 树(一种非线性结构,其中的元素被组织成一个层次结构)

    • 结点:树中的一个位置。
    • :树中两个结点的连接。
    • 根结点:就是指位于该树顶层的唯一结点。一棵树只有一个根结点,根结点没有父节点。
    • 子结点:一个树中较低层的结点是上一层结点的子结点。位于树中当前结点下面的结点,并由边与之直接连接。
    • 同胞结点:属于同一结点的子结点。
    • 叶结点:没有任何子结点的结点。
    • 内部节点:一个至少有一个子结点的非根节点。
    • 祖先节点:位于当前结点以上的结点。
    • 后代结点:位于当前结点一下的结点。
    • 路径长度:通过计算从根到该结点所必须越过的边数目。
    • 高度:从根到叶子之间的最远路径的长度。
    • 阶(度):树中任一结点可以具有的最大子结点的数目。
  • 树的分类:
    • 二叉树:结点最多具有两个孩子的树。
    • 完全树:如果某树是平衡的,且底层所有叶子都位于树的左边,则认为该树是完全的。
    • 满树:如果一颗n元树的所有叶子都位于同一层且每一结点要么是一片叶子,要么是正好具有n个孩子。
    • 完全二叉树:在每个K层上都有2^k个结点,最后一层除外,在最后一层中的结点必须是在最左边结点。
  • 树的遍历:
    • 前序遍历:从根结点开始,访问每一个结点及其孩子。(A->B->D->E->C)
    • 中序遍历:从根结点开始,访问结点的左侧孩子,然后是该结点,再然后是任何剩余的结点。(D->B->E->A->C)
    • 后序遍历:从根结点开始,访问结点的孩子,然后是该结点。(D->E->B->C->A)
    • 层序遍历:从根节点开始,访问每一层的所有结点,一次一层。(A->B->C->D->E)
  • 二叉树--表达式树表达式树的及其内部结点包含着操作,且所有叶子也包含着操作数。对操作树的求值是从下往上的。

  • 二叉树--决策树(背部疼痛诊断器)决策树的结点表示决策点,其子结点表示在该决策点的可选项。决策树的叶结点表示可能的判断,这些推断是根据决策结果得出的。

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

  • 问题1:type作用?
  • 问题1解决方案:XXXXXX
  • 问题2:XXXXXX
  • 问题2解决方案:XXXXXX
  • ...

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

  • 问题1:背部疼痛诊断器找不到文件。
  • 问题1解决方案:
    • 这是一个小错误,本来我还以为文件名字和文件添加位置不对。实际上,虽然我把txt文件和诊断器程序放在了一个文件夹里面,但是他还是不能直接通过名字进行查找。
    • 小组成员段志轩同学告诉我,用绝对地址就可以确保可以查找到文件。
    • 我走进了思维误区,以为txt文件的存放方式不对,而并没有考虑地址的问题。
  • 问题2:对于LinkedBinaryTree中的getRight()getLeft()方法,我一开始写了两种实现方法。但是在运行背痛诊断器的时候,有一种出现了类似无限递归的情况。
  • 问题2解决方案:XXXXXX
  • 问题3:背痛诊断器抛出异常
Exception in thread "main" java.lang.ClassCastException: week6.BinaryTreeNode cannot be cast to java.base/java.lang.String

无法转换成String类型。DecisionTree类中evaluate()方法中的System.out.println (current.getRootElement());报错。

  • 问题3解决方案:
    • 首先,我从根上查找错误,观察指针类的getRootElement()操作,运用的是泛型,应该是可以转为String型输出的。
    • 然后,考虑背痛诊断器的测试类和DecisionTree类有无问题。因为是书上代码,所以我又和书上的代码校对了一遍,代码没有错误。
    • 代码调试截图
    • 代码托管

      1

上周考试错题总结

上周无错题,优秀!

结对及互评

点评过的同学博客和代码

其他

这周的代码很复杂,不再是单单的一个类几个方法。对于代码的理解和实现上面还是有所不足的。对于背痛代码的错误,经过两三个小时的调试也没有找到根本原因。
对于上学期的迭代和递归知识也有所忘记,应该及时温习。对于代码要保持高度的紧张。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 610/610 1/2 20/30
第三周 593/1230 1/3 18/48
第四周 2011/3241 2/5 30/78
第五周 956/4197 1/6 22/100
第六周 2294/6491 2/6 20/120

参考资料

猜你喜欢

转载自www.cnblogs.com/gk0625/p/9853571.html