接着继续来看树的一些相关的方法. 高度和节点个数 遍历二叉树 - 递归遍历 遍历二叉树 - 中序迭代遍历和迭代器 二叉树的实现 - 节点类BinaryNode 二叉树的实现 - 组装树的方法 高度和节点个数 在开始计算之前, 要明白Tree结构是在Node外边包装了一层, 所以可以把方法写在Bina
Java的HashMapn内部的实现是数组加上红黑树. 所以想要真正的了解散列表, 原来自行实现的那种不是最好的. 现在就是要重新杀到树了, 来看看这种数据结构. 上次看算法第四版的时候, 图和树只是略略看过, 那本书有点太深, 直接看的话有点懵逼, 现在第二次, 感觉就好多了. 还是那句话, 看不
如果把我们的字典看成一个大线性表的话, 也没有任何问题, 不过随着字典的扩大, 我们会发现, 这和现实中为了寻找一个词语的解释, 一页一页翻字典没有任何区别. 也就是说, 我们的字典看上去叫字典, 也实现了字典的接口, 但是在内部, 没有实现一本字典应该有的索引功能. 因此, 我们会想, 如果有一个
在上一章的查找中, 即使是二分搜索, 也要一点一点的对比过来, 有没有一种办法, 可以根据要查找的内容, 直接定位到数组中的具体一个索引, 而不是反复操作索引和进行对比. 这个思想就促使了一种通常叫字典的数据结构的诞生, 就像一本字典一样, 每一个词对应着一个页码, 我无需一页一页去翻直到找到那个词
在挺进哈希表之前, 先来一个短短的小插曲, 就是查找. 我们的有序表相比线性表, 在很多操作上的复杂度都有了提升, 然后因为有序, 有一种操作却可以大幅提升效率. 发布完之后发现, 这竟然是到现在为止的400篇文章, 又一个里程碑. 确实也真的学到很多东西啦. 无序表中的查找 有序表中的查找 改造数
在之前的学习中, 唯一学到过的算法, 除了利用数据结构解题之外, 纯粹的算法就是排序了. 现在的线性表, 已经组合了所有之前学过的线性的数据结构, 将这两者搭配起来, 可以来做一个有序表. 现在就在线性表的基础上, 再制作一个有序表. 有序表的理念 改造数组线性表为有序表 改造链表线性表为有序表 有
没有迭代器的线性表, 还能够叫线性表吗. 在现代的类库里, 类似线性表这样存放数据的集合, 如果不配上一个迭代器, 那几乎就没有人用了. 原因很简单, 不好用. 使用数据结构的人要花费额外的经历去按照顺序使用其中的元素. 迭代器就提供了这样一个便利的模式. 其实迭代器在之前看设计模式的时候已经学过了
这两天在看CS61A的同时,一直在反复翻阅SICP with Python, 关于编程理念最基本的东西真是怎么看也看不够。 特别是递归里边,如何用N种硬币来表示一个数字的这类问题,总是创建不出来对应的抽象。普通的处理一批数据的递归倒还可以。 CS61A现在听完了Python的部分,进入了第三章解释器
双端队列就是同时可以在队列的头和尾, 都进行单个队列或者说和栈一样的操作. 双端队列被称为double-ended queue, 简称deque. 优先队列是指进入队列中的所有对象, 都有一个优先级, 出队的时候, 始终按照优先级较高的对象先出列的顺序进行处理. 可以想象, 双端队列其实我们已经实现
今天是春分, 小学入学的具体政策也出来了. 今年这个摇号还真是让人头大. 队列的思想这里就不赘述了, 其核心是先进先出, 像现实中的队伍一样, 从一侧添加数据, 从另外一侧取走数据. 队列的尾和头就和现实中的一样, 添加数据的一侧叫做尾(back), 取出数据的一侧叫做头(front). 队列的接口