今年把两年前写的这篇文章重写了一遍。作为AlgoXY的第一章。
重写后,不要求读者懂任何一门特定的编程语言。全部算法提供了两种描述:
伪代码描述和数学函数描述。
有些地方给出了C++, Python, Haskell的代码片段,但是读者可以完全不懂这些具体的编程语言。
这一章主要希望说,BST实际上可以认为是数据结构这个世界中的 Hello world内容。
有些读者可能认为Array和Linked List这样更为基础的数据结构才是 Hello World,而轮不到二叉树。
这主要是由于,Array的纯函数实现是基于树的,其实比较难。所以我不得不把Array放到后继章节。
大致outline一下这章的内容:
- 通过一个10行的程序,展示Balanced BST如何把圣经中的所有词汇统计出来,使得读者感性认识BST的威力。
- 描述BST的逻辑数据结构
- BST的插入,为什么我们说BST是数据结构中的hello world
- 前序遍历,以及树排序,并给出一个很著名的面试题:给出BST的前序遍历和中序遍历结果,重建树
- 查找操作,包括lookup, min/max,以及succ/pred,并指出后者为imperative only的问题。前阵我在TL给
出过讨论;
- 删除操作,给出一个特别简洁的递归删除算法,并提出一个对称练习题。
- 随机构建,简述了随机构建的思路,并作为练习题留给读者。
- 附录和参考文献。
PDF可以从这里下载:https://sites.google.com/site/algoxy/bstree/bstree-en.pdf
web: https://sites.google.com/site/algoxy/bstree
分享到:
相关推荐
本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法。分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树。 要维持这个树,必须在插入和删除的时候都检测是否出现...
二叉树-每个节点都有0-2个子节点的树数据结构 完整的二叉树-每个级别(除最后一个级别外)都已满,所有节点都尽可能地靠左 堆-遵循“堆属性”规则的树数据结构 最大堆-父节点值> =子值 最小堆-父节点值<=子值 二...
│ ├── Structure 数据结构 │ │ ├── StackExample.php 堆栈 先进后出 LIFO (Last In First Out) │ │ ├── LinearChain.php 线性表 单链存储 │ │ └── LinearOrder.php ...
欢迎使用JavaTests 这是Java 8测试项目,其中包含有关新Java功能的工作示例。 DataStructure示例: 二叉树,自定义Java列表,气泡排序,深度优先搜索 ... 选择要运行的测试:a)Java注释b)Java Lambda c)数据结构
难以置信的是,这样一本C语言的入门书籍,从hello world开始讲起,却在短小的篇幅里,手把手教你写了stdio.h stdlib.h string.h当中大部分例程,实现了二分查找、快速排序、二叉树、哈希表这些重要的数据结构和算法...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...
2.2. 排序二叉树 3. 哈希表 27. 本阶段总结 III. Linux系统编程 28. 文件与I/O 1. 汇编程序的Hello world 2. C标准I/O库函数与Unbuffered I/O函数 3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap ...
比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? 12、在weblogic中发布ejb需涉及...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能 地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问 ;然而,对齐的内存访问仅需要一次访问。 20 int...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、...
5、说明生活中遇到的二叉树,用java实现二叉树 73 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 78 7、写一个Singleton出来。 81 8、递归算法题1 84 9、递归...
5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...