网上的相关教程很是多,基础知识自行搜索便可。javascript
习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。前端
参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/btreejava
一棵树最上面的点称为根节点
,若是一个节点下面链接多个节点,那么该节点称为父节点
,下面的节点称为子节点
,二叉树的每个节点最多有2个子节点,一个节点子节点的个数称为度
,二叉树每一个节点的度只能是0,1,2中的一个,度为0的节点称为叶节点
。git
二叉查找树是一种特殊的二叉树,其插入查找和删除都很是高效。github
实现二叉查找树(BST)
算法
TIP:BST
在插入数据时的逻辑,自己就是一种二分法思惟。数据结构
树的遍历ide
TIP:树的遍历通常分为先序遍历,中序遍历,后序遍历,这里的序是指对于一个节点以及它的左子节点和右子节点的访问次序。具体使用场景的例子包括:先序遍历时,能够用于查看树结构,中序遍历,能够用于显示排序结果,后序遍历,可用于计算目录内文件占用的数据大小。函数
值的查找性能
3.1查找给定值
TIP:实际上就是二分法查找
3.2查找最小值
TIP:BST
中最左侧的节点。
3.3查找最大值
TIP:BST
中最右侧的节点。
删除节点
TIP:主要注意删除同时包含左右孩子节点的节点时逻辑,由BST
插入的规则能够知道,节点右子树中全部的节点都是大于当前节点值的,因此右子树中找出的最小值是大于当前节点左子树上全部值的,因此将其上浮至当前待删除节点位置,是不影响二叉树特性的。
BST
增长一个新方法,返回BST
中节点个数。BST
增长一个新方法,返回BST
中边的个数。BST
类增长一个新方法max( )
,返回最大值。BST
类增长一个新方法min( )
,返回最小值。BST
中,显示每一个单词出现的次数BST
构造函数中增长一个count
属性,在增删节点成功时修改count
值实现计数便可。BST
边的数量比节点数量少1.BST
作练习就好,词频统计更多会用到Trie
树,也就是字典树,感兴趣的读者能够自行查阅。【先序+中序】或者【后序+中序】均可以还原出惟一的二叉树,只根据【先序+后序】还原出的二叉树不是惟一的(感兴趣的能够看看这篇《 为何只给出前序和后序,不能惟一肯定一个二叉树 》),这里的二叉树指的是通常二叉树,不是二叉搜索树。或者相关的文章已经不少了,随手贴一篇带图的《由遍历序列还原二叉树结构》,理解难度并不高,一样建议本身编码实现一下。
二叉树是很是重要的数据结构,书中介绍的只是最基本的知识,更进一步的学习会涉及二叉树的数学特性,限制更多性能也更优的平衡二叉树,满二叉树,红黑树等等,以及相关的深度优先和广度优先算法,路还很长,静下心慢慢走。