本周主要学习的是树的内容,树由结点和边组成,位于树中较低层的结点是上一层结点的孩子。一个结点只有一个双亲,统一双亲的两个节点称为兄弟。没有任何孩子的 的结点称为叶子。一个至少有一个孩子的非根结点称为一个内部结点。若是一个结点在从跟开始的路径中位于另外一结点之上,则该节点就是它的祖先。沿着其实子某一特定节点的路径能够的到达的结点是该节点的子孙。
10.1.1树的分类
树中任一结点能够具备的最大孩子数目交租该树的度。对结点所含有的孩子数目无限制的数称为广义树。咱们将每一节点先只为不超过n个孩子的树称为一棵n元树。节点最多具备两个孩子的树称为二叉树。若是一个树的全部叶子都位于同一层或者至少彼此相差不超过一个层就称之是平衡的。一棵含有m个结点的平衡n元树具备的高度为lognm。
彻底树:若是某树是平衡的,且全部叶子都位于树的左边,则认为树是彻底的。彻底树在每一个k层上都具备2^k个结点。
满树:若是一棵n、元树的全部叶子都位于同一层且没一结点要么是一篇叶子要么正好具备n个孩子,则称树是满的。
10.2实现树的策略
10.2.1树的数组实现值计算策略。
使用数组来储存一棵树:对于任何储存在数组位置n处的元素而言,该元素的左孩子将储存在位置2n+1处,该元素的右孩子则储存在位置(2×n+1)处。
10.2.2数的数组实现之模拟连接策略
树的遍历:前序遍历,中序遍历,后序遍历,层序遍历。php
名称 | 内容 |
---|---|
前序遍历 | 从根结点开始,访问每一结点及其孩子 |
中序遍历 | 从根结点开始,访问结点的左孩子,而后是该结点,再而后是任何剩余结点。 |
后序遍历 | 从根结点开始,访问结点的孩子,而后是该结点。 |
层序遍历 | 从根结点卡斯和,访问每一层的全部结点,一次一层 |
前序遍历
伪代码html
Visit node Traverse(left child) Traverse(right child)
中序遍历
伪代码java
Traverse(left child) Visit node Traverse(right child)
层序遍历
伪代码node
Create a queue called nodes Create an unordered list called results Enqueue the root onto the nodes queue While the root onto the nodes queue While the nodes queue is not empty { Dequeue the first element from the queue If that element is not null Add that element to the rear of the results list Enqueue the children of the element Else Add null on the result list } Return an iterator for the result list
10.4 二叉树
二叉树基本操做方法git
操做 | 说明 |
---|---|
getRoot | 返回指向二叉树的引用 |
isEmpty | 断定该树时是否为空 |
size | 断定树中的元素数目 |
contains | 断定目标是否在该树中 |
find | 若是找到指定元素,则返回指向其的引用 |
toString | 返回树的字符串表示 |
itertorInOrder | 为树的中序遍历返回一个迭代器 |
itertorPreOrder | 为树的前序遍历返回一个迭代器 |
itertorPostOrder | 为树的后续遍历返回一个迭代器 |
itertorLevelOrder | 为树的层序遍历返回一个迭代器 |
二叉树的应用:表达式树,背部疼痛诊断器
用链表实现二叉树web
LinkedBinaryTree left,right
而后在LinkedBinaryTree类的构造方法里加入this.left=left,this.right=right就能够了。数组
问题1解决方案:而后发现是在调用方法时用错了对象,将应该调用树的位置错用了其子树的对象。数据结构
(statistics.sh脚本的运行结果截图)学习
-错题一
-问题解答:这道题错的缘由是我错将书上的查找的时间复杂度错认为二叉树的时间复杂度。列表的时间复杂度是与查找方法有关的,可是二叉树的查找必需要遍历每一个元素。因此时间复杂度应该是O(n)。测试
错误三
-问题解答:中序遍历从根节点开始,访问结点的左孩子,而后是该结点,再而后是任何剩余结点。
20172304郭恺郭恺同窗的博客依然是一如既往的优秀,既将教材中的内容总结的详略得当,还能具体而全面的对本身的错误进行总结和提高。
20172328李馨雨理性与同窗的博客仍是很认真的。
上周博客互评状况
20172304郭恺同窗本次的博客十分优秀,对教材的总结详略得当,而又针对本身在教材中发现的问题进行了深刻的鞭辟入里的思考与解答。整个过程看起来赏心悦目给人一种美的享受。
20172328李馨雨同窗的博客十分的完整与丰富,体现了她认真的学习态度。
本周通过了学习了解了树的相关知识,树与其说是一种数据结构更不如说是逻辑结构。他是创建在基础数据结构之上的,好比数组,栈,或者链表。合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。只有通过充分的积累。充分学习了基础的数据结构,才能作出跟多优秀的代码。才能更好的建设中国特点社会主义。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 30/30 | 1/1 | 10/10 | |
第二周 | 766/796 | 1/2 | 40/50 | |
第三周 | 817/1613 | 1/3 | 20/70 | |
第四周 | 1370/3983 | 2/5 | 30/100 | |
第五周 | 1235/5214 | 1/6 | 10/110 | |
第六周 | 1328/6542 | 1/7 | 20/130 |
1.蓝墨云班课
2.java软件结构与数据结构