今年把两年前写的这篇文章重写了一遍。作为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
分享到:
相关推荐
树是一种非线性数据结构,常用于表示层次关系,比如二叉树在搜索和排序算法中广泛应用。图则用于表示复杂的相互连接关系。 排序算法是计算机科学中的另一个重要主题。快速排序、归并排序、冒泡排序、插入排序、选择...
- 数据结构是计算机科学中的一个核心概念,它涉及如何在计算机中组织和管理数据。 - 选择合适的数据结构对于提高程序的效率至关重要。 - 不同的数据结构适合解决不同类型的问题。 **知识点2:算法的重要性** - 算法...
例如STL(Standard Template Library)的容器(如vector、list、set、map等)、算法(如排序、查找等)的实现细节,以及如何在实际问题中应用这些数据结构和算法。 在准备公司笔试时,熟悉这些知识点至关重要。理解...
通过学习,你可以掌握如何选择合适的数据结构来解决问题,例如,何时使用数组,何时使用链表,何时考虑使用二叉树等。 4. **算法**: 算法是解决问题或执行任务的精确步骤,包括排序、搜索、图算法、动态规划等。...
首先,我们要理解数据结构是关于如何在计算机中组织和存储数据的科学。它涉及到各种类型的数据组织形式,如数组、链表、栈、队列、树、图、哈希表等。这些数据结构各有特点,适用于不同的场景。例如,数组提供随机...
根据提供的文件内容,以下是对知识...以上知识点涵盖了数据结构与算法分析的基本概念和原理,以及它们在具体问题解决中的应用。对于浙江大学的《高级数据结构与算法分析》课程的学习者而言,理解这些概念是十分重要的。
本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法。分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树。 要维持这个树,必须在插入和删除的时候都检测是否出现...
### C#语言中的数据结构应用知识点 #### 一、引言 随着计算机科学的发展,数据结构作为一门重要的学科,对于理解和实现高效的算法至关重要。近年来,随着C#语言的普及,越来越多的专业人士开始关注如何利用C#语言来...
数据结构与算法是计算机科学中的核心概念,对于软件开发工程师来说至关重要。通过掌握数据结构与算法,可以更高效地解决实际问题,提高程序运行效率。本教程旨在帮助准备软考初级和中级考试的考生全面理解数据结构与...
【算法与数据结构:串与KMP算法】 ...总结,KMP算法是字符串匹配中的高效工具,而树作为重要的数据结构,有着广泛的应用,二叉树和赫夫曼树是其重要组成部分。理解并掌握这些概念对于学习计算机科学至关重要。
总的来说,这个C++课件将引导你走过从基础语法到面向对象编程,再到数据结构和模板的旅程,帮助你在编程世界中建立起坚实的根基。通过实践和不断的练习,你将能够运用C++解决实际问题,开启精彩的编程生涯。
- 数据结构的高级应用:二叉树、二叉搜索树、图的遍历、哈夫曼编码、约瑟夫环、汉诺塔问题 - 结构体和链表的深入使用:如学生信息管理、火车车厢重排 ### 第三部分:数值计算与趣味数学篇 - 数值计算:如高次方数...
本书适用于初学者以及具有一定编程基础的学习者,旨在帮助读者掌握Java语言的基础知识、面向对象编程的概念及实践,并深入了解各种数据结构及其在实际编程中的应用。 #### 二、书籍内容概览 本书为第十二版,共...
将所有学生的姓名存储在一个哈希表或集合中,然后通过查询该数据结构来快速判断某个学生是否在名单中。这种方法的时间复杂度接近O(1),非常高效。 #### 编程语言 1. **面向对象思维描述场景** - **对象及交互**...
这本书会介绍各种经典的数据结构,如数组、链表、栈、队列、树(二叉树、平衡树如AVL树和红黑树)、图以及哈希表等。理解这些数据结构的特性和操作方式对于编写高效代码至关重要。 算法是解决问题的步骤或方法,是...
二叉树-每个节点都有0-2个子节点的树数据结构 完整的二叉树-每个级别(除最后一个级别外)都已满,所有节点都尽可能地靠左 堆-遵循“堆属性”规则的树数据结构 最大堆-父节点值> =子值 最小堆-父节点值<=子值 二...
8. 字符串处理,如将"worldhello"转换为"helloworld",并保持左右两侧有空格。这需要对字符串进行遍历和修改。 9. 数组旋转问题,要求实现数组旋转并找出其中的规律。 10. 查找最长回文子串。回文是指正读和反读都...
堆(Heap)是一种特殊的树形数据结构,通常分为最大堆和最小堆,具有完全二叉树的特性,并满足父节点的值大于或小于其子节点的值。在字符串中应用堆结构,可能是在寻找某种模式、进行排序或者优化搜索效率。 “置换...