本章的内容主要讲树,顾名思义树与队列、栈、列表最大的区别就在于,树是一种非线性结构,其元素是一种层次结构存放。html
树:java
树的数组实现:由于数组实现树比较麻烦,因此在树的数组实现中书上一样模拟了连接策略,如图所示。
node
前序遍历:从根节点开始访问每个节点及其孩子。如图:git
中序遍历:从根节点开始(注意并非先访问根节点),中序遍历根节点的左子树,而后是访问根节点,最后中序遍历根节点的右子树。如图:数组
后序遍历:从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点。如图:数据结构
层序遍历:从树的第一层,也就是根节点开始访问,从上到下逐层遍历,在同一层中,按从左到右的顺序结点逐个访问。如图:post
(二叉树极其重要,以致于用三级标题来写它,而不是通常的一个点。)二叉树又名二元树,它的每个结点最多具备两个孩子结点。学习
BinaryTreeADT
其中的基本方法有:getRoot
、isEmpty
、size
、contains
、find
、toString
和一些迭代器相关的方法。暂时没有遇到其余的问题。测试
contains
方法时,第一次本身的代码以下public boolean contains(T targetElement) { BinaryTreeNode current = root; BinaryTreeNode temp = root; boolean contains = false; if (current == null) { contains = false; } if (current.getElement().equals(targetElement)) { contains = true; } while (current.right != null) { if (current.right.getElement().equals(targetElement)) { contains = true; } else { current = current.right; } } while (temp.left != null) { if (temp.left.getElement().equals(targetElement)) { contains = true; } else { temp = temp.left; } } return contains; }
这致使我测试该方法时只要是在判断非根节点就会出现程序一直运行没法中止的状况。设计
if(current.right.getElement().equals(taretElement)) { contains = true; break; }
和
if (temp.left.getElement().equals(targetElement)) { contains = true; break; }
后便解决了该问题。
上周没有测试,因此没有错题
(本部分用于收集本章节后的生词)
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/5000 | 2/2 | 8/8 | 认真学习!积极向上 |
第二周 | 812/812 | 1/3 | 22/30 | |
第三周 | 814/1626 | 1/4 | 20/50 | |
第四周 | 1386/3012 | 2/6 | 20/70 | 愉快的国庆节就要结束了... |
第五周 | 1222/3234 | 1/7 | 30/100 | |
第六周 | 1327/4561 | 2/7 | 30/100 | 啦啦啦啦啦 |
计划学习时间:30小时
实际学习时间:30小时
改进状况:规范commit行为。