-
Lesson 1 - 最简单的C程序
-
Lesson 2 - 打印输出
-
Lesson 3 - 循环打印
-
Lesson 4 - 判断奇偶
-
Lesson 5 - 从1加到100求和
-
Lesson 6 - 乘法表
-
Lesson 7 - 求100以内的最大素数
-
Lesson 8 - 1到100有多少个9
-
Lesson 9 - 整型转字符串
-
Lesson 10 - 约瑟夫环
-
Lesson 11 - 求两个坐标点之间的距离
-
Lesson 12 - 判断机器存储是否小尾端
-
Lesson 13 - 对不起,你的车今天限行
-
Lesson 14 - 判断地图上某点是否有出路
-
Lesson 15 - 统计一个数二进制表示中1的个数
-
Lesson 16 - 字符串拷贝
-
Lesson 17 - 统计单词个数
-
Lesson 18 - 实现 printf
-
Lesson 19 - 命令解释器
-
Lesson 20 - 预处理器实现
-
Lesson 21 - 词法分析器实现
-
Lesson 22 - 猜数游戏
-
Lesson 23 - 五子棋
-
Lesson 24 - 超链接分析器
-
Lesson 25 - cp命令实现
-
Lesson 26 - ELF文件头分析器实现
-
Lesson 27 - 简单流处理器实现和正则表达式
-
Lesson 28 - 数学计算器实现
-
Lesson 29 - 数学计算器实现more命令实现
-
Lesson 30 - sort命令实现
-
Lesson 31 - ls -l命令实现
-
Lesson 32 - Bash项目
-
Lesson 33 - 动态数组实现
-
Lesson 34 - 约瑟夫环问题
-
Lesson 35 - 表达式求值问题
-
Lesson 36 - 广度优先解决迷宫问题
-
Lesson 37 - 词频统计器
-
Lesson 38 - 堆排序问题
-
Lesson 39 - 构造符号表
-
Lesson 40 - MyDictionary项目
-
Lesson 41 - BSearch 实现
-
Lesson 42 - QSort 实现
-
Lesson 43 - 深度优先解决迷宫问题
-
Lesson 44 - KMP 算法实现
-
Lesson 45 - 最长公共子序列(LCS)问题
-
Lesson 46 - Dijkstra 算法
-
Lesson 47 - Huffman Coding 算法
-
Lesson 48 - 地图导航项目
Lesson 37 - 词频统计器
课程任务
链表的每个节点可以有一个后继 next,而二叉树(Binary Tree)的每个节点可以有两个后继:l 表示左子树,r 表示右子树。
排序二叉树(BST,Binary Search Tree) 是二叉树的一个特殊形态,它具有这样的性质:
对于二叉树中的任意节点,如果它有左子树或右子树,则该节点的数据成员大于左子树所有节点的数据成员,且小于右子树所有节点的数据成员。
使用排序二叉树这种数据结构,统计一个文本文件中所有英文字母的出现次数,然后按字母顺序打印输出。简化起见,字母不区分大小写。
提高要求
统计文本中英文单词的出现次数,使用 tree 树形打印软件,打印上题中生成的二叉树,并按照单词出现的次数从多到少依次打印输出。
- 提示:可以获得二叉树中单词出现次数最多的节点,然后将它从树上删除,重复上述操作,直到输出所有单词节点。
重要知识点
- 空二叉树 vs 满二叉树 vs 完全二叉树
- 平衡二叉树 和 排序二叉树
- 二叉树的前序(Pre-order),中序(In-order)和后序(Post-order)遍历。
- 前序和中序遍历的结果合在一起可以唯一确定二叉树的形态,也就是说根据遍历结果可以构造出二叉树。
- 排序二叉树的中序遍历结果就是所有节点根据键值从小到大的顺序输出。
- 排序二叉树的插入操作
- 排序二叉树的删除操作
参考资料
- 二叉树的基本概念 http://learn.akae.cn/media/ch26s02.html#id2846120
- The `Tree' preprocessor https://www.essex.ac.uk/linguistics/external/clmt/latex4ling/trees/tree/