20172333 2018-2019-1 《程序设计与数据结构》第六周学习总结

20172333 2018-2019-1 《程序设计与数据结构》第六周学习总结

教材学习内容总结

《Java软件结构与数据结构》第十章-树

一、树的重点(我认为)概念

  • 树是非线性结构。
  • 树是倒立结构,根结点是最上面的那个结节点,从上至下,上一个结点是它下面结点的双亲(这一个结点又当爹又当妈),同一个双亲的结点互相叫兄弟。没得下一代的结点叫做叶子。
  • 从根节点到叶子最近的长度叫做路径长度,也称之为高度。
  • 每一个结点所能含有的孩子的最大个数叫做度。一个结点最多含有N个孩子就叫这个树为N元树。
  • 树分为完全树、平衡树、满树。
  • 平衡树指的是叶子之间相差不超过两层的树。图

  • 完全树指的是平衡树的前提下,最后一层的叶子都在左边。
    -完全树的性:1.若结点有n个,树高为⌊log2n⌋ +1 。2.若树高为h,则总结点数n ≤ 2^h - 1。3.若树的深度为 k ,则第 k 层有 2^k-1 个结点 。4.结点如果有N个,则叶节点有n/2个。
    -满树的是一个n元树的所有叶子在同一层。图

二、树的实现策略

  • ①数组实现树的计算策略
    • 可能的计算策略是将元素n的左孩子置于位置(2xn+1),将右孩子置于位置(2x(n+1))
  • ②数组模拟链表来实现树
    • 数组的每一个元素都是结点类,每一个结点储存的是孩子或者双亲的数组索引。
  • ③树的分析
    • 一颗含有M个元素的平衡n元树具有的高度为lognM。

      三、树的遍历

  • ①前序遍历:从根结点开始遍历,访问每一个结点及其孩子。图

  • ②中序遍历:从根结点开始,访问结点的左孩子,然后是该结点,再然后是任何剩余节点。图

  • ③后序遍历:从根结点开始,访问结点的孩子,然后是该结点。图

  • ④层序遍历:从根结点开始,访问每层的所有节点,一次一层。

    四、二叉树

  • 二叉树:每个结点只有两个子结点的树
  • 二叉树的操作

操作 说明
getRoot 返回指向二叉树跟的引用
isEmpty 判定该树是否为空
size 判定树中的元素数目
contains 判定指定目标是否在该树中
find 如果找到指定元素,则会返回指向其的引用
toString 返回树的字符串表示
iteratorInOrder 为树的中序遍历返回一个迭代器
iteratorPreOrder 为树的前序遍历返回一个迭代器
iteratorPostOrder 为树的后序遍历返回一个迭代器
iteratorLevelOrder 为输的层序遍历返回一个迭代器
//  返回存储在树根中的元素。
        public T getRootElement() throws EmptyCollectionException;

        //  返回根的左子树。
        public BinaryTree<T> getLeft() throws EmptyCollectionException;

        //  返回根的正确子树。
        public BinaryTree<T> getRight();

        //  如果二叉树包含与指定元素匹配的元素,则返回true,否则返回false。
        public boolean contains (T target);

        //  返回对与指定目标匹配的树中的元素的引用。
        public T find (T target) throws ElementNotFoundException;

        //  如果二叉树不包含元素,则返回true,否则返回false。
        public boolean isEmpty();

        //  返回此二叉树中的元素数。
        public int size();

        //  返回二叉树的字符串表示形式。
        public String toString();

        //  返回二叉树上的预订遍历。
        public Iterator<T> preorder();

        //  返回二叉树上的无序遍历。
        public Iterator<T> inorder();

        //  返回二叉树上的后期遍历。
        public Iterator<T> postorder();

        //  在二叉树上执行级别遍历。
        public Iterator<T> levelorder() throws EmptyCollectionException;

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

  • 问题1:树的四种遍历方法,只有最后一种层序遍历我看懂了,其他三种它的介绍都很复杂,有没有更简单的说明?
  • 解答:各个方法的顺序。
    • 先序:结点,左子树,右子树
    • 中序:左子树,结点,右子树
    • 后序:左子树,右子树,结点
  • 问题2:树型数据结构有什么用?
  • 解答:就是一种非线性数据结构,百度了许多全是相关的实现,完全没人提过这个东西有什么用,学来干啥,大概就是锻炼思维的吧。
  • 问题3:我只之前看到的树都是由一条条线连接的,看起来是方便,但是并没有包含其实质内涵。
  • 解答:图

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

  • 问题1:在最后进行测试代码的编写过程中出现爆红现象

  • 解决:最后发现我这个结点的另外两个结点还在后面才实例化,导致前搜索的时候没有这两个结点。

代码托管

-图代码

上周考试错题总结

结对及互评

基于评分标准,我给李楠的博客打分:7分。得分情况如下:

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

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

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

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

感想,体会真切的(加1分)

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

点评过的同学博客和代码

  • 本周结对学习情况

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

看不懂。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 0/0 1/2 10/20
第三周 1500/1500 1/3 10/30
第四周 2761/4261 2/5 25/55
第五周 814/5075 1/6 15/70
第六周 1091/6166 1/7 15/85

猜你喜欢

转载自www.cnblogs.com/yanyujun527/p/9844557.html
今日推荐