【摘要】 网上的相关教程非常多,基础知识自行搜索即可。习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。

网上的相关教程非常多,基础知识自行搜索即可。

习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/btree

一.二叉树的基本知识

基本概念

一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称为,二叉树每个节点的度只能是0,1,2中的一个,度为0的节点称为叶节点

基本特点

二叉查找树是一种特殊的二叉树,其插入查找和删除都非常高效。

二.基本练习

  1. 实现二叉查找树(BST)

    TIP:BST在插入数据时的逻辑,本身就是一种二分法思维。

  2. 树的遍历

    TIP:树的遍历一般分为先序遍历,中序遍历,后序遍历,这里的序是指对于一个节点以及它的左子节点和右子节点的访问次序。具体使用场景的例子包括:先序遍历时,可以用于查看树结构,中序遍历,可以用于显示排序结果,后序遍历,可用于计算目录内文件占用的数据大小。

  3. 值的查找

    3.1查找给定值

    TIP:实际上就是二分法查找

    3.2查找最小值

    TIP:BST中最左侧的节点。

    3.3查找最大值

    TIP:BST中最右侧的节点。

  4. 删除节点

    TIP:主要注意删除同时包含左右孩子节点的节点时逻辑,由BST插入的规则可以知道,节点右子树中所有的节点都是大于当前节点值的,所以右子树中找出的最小值是大于当前节点左子树上所有值的,所以将其上浮至当前待删除节点位置,是不影响二叉树特性的。

  5. 计数

三.课后习题(书中第十节习题)

  1. BST增加一个新方法,返回BST中节点个数。

  2. BST增加一个新方法,返回BST中边的个数。

  3. BST类增加一个新方法max( ),返回最大值。

  4. BST类增加一个新方法min( ),返回最小值。

  5. 写一段程序,读入一个较大的文本文件,并将其中的单词保存到BST中,显示每个单词出现的次数

四.习题思路

  1. BST构造函数中增加一个count属性,在增删节点成功时修改count值实现计数即可。

  2. BST边的数量比节点数量少1.

  3. (略)

  4. (略)

  5. 分解出的单词实际上就是字符串,字符串的比较实际上就是从第一位开始逐个比较ASCII码,用上面实现的BST做练习就好,词频统计更多会用到Trie树,也就是字典树,感兴趣的读者可以自行查阅。

五. 根据遍历序还原二叉树

【先序+中序】或者【后序+中序】都可以还原出唯一的二叉树,只根据【先序+后序】还原出的二叉树不是唯一的(感兴趣的可以看看这篇《 为什么只给出前序和后序,不能唯一确定一个二叉树 》),这里的二叉树指的是一般二叉树,不是二叉搜索树。或者相关的文章已经很多了,随手贴一篇带图的《由遍历序列还原二叉树结构》,理解难度并不高,同样建议自己编码实现一下。

六. 关于二叉树

二叉树是非常重要的数据结构,书中介绍的只是最基本的知识,更进一步的学习会涉及二叉树的数学特性,限制更多性能也更优的平衡二叉树,满二叉树,红黑树等等,以及相关的深度优先和广度优先算法,路还很长,静下心慢慢走。

来源:华为云社区  作者:大史不说话

野生前端的数据结构基础练习(7)——二叉树相关推荐

  1. 野生前端的数据结构基础练习(8)——图

    [摘要] 图是由边的集合和点的集合组成的.如果图的边有方向(或者说图中的顶点对是有序的)则成为有向图,如果边没有方向则称为无向图. 网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orell ...

  2. 野生前端的数据结构基础练习(6)——集合

    [摘要] 集合Set是一种不包含不同元素的数据结构,主要特性包括无序性和单一性,即集合中的成员是无序的,同时也是不重复的. 网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的 ...

  3. 野生前端的数据结构基础练习(5)——散列

    网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/dashn ...

  4. 野生前端的数据结构基础练习(4)——字典

    [摘要] 网上的相关教程非常多,基础知识自行搜索即可.习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/d ...

  5. 野生前端的数据结构基础练习(3)——链表

    [摘要] 网上的相关教程非常多,基础知识自行搜索即可.习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/d ...

  6. 野生前端的数据结构基础练习(2)——队列

    网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/dashn ...

  7. 【数据结构基础复习】二叉树的非递归遍历(二)

    一.绪论 上一章中,我们粗略的复习了二叉树的遍历,不过是采用递归的方式遍历的.扩展来说,二叉树的遍历是可以推广到任何树结构的.但是,这里要强调一下,任何递归方法可以解决的问题都能用非递归的方法去实现. ...

  8. 野生前端的数据结构练习(12)贪心算法

    参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的 ...

  9. 野生前端的数据结构练习(9)冒泡排序,选择排序,插入排序

    [摘要] bubble sort的是最基本的算法,被誉为永远会被考从来不被用的算法,基本原则是大数右移,每轮遍历后最右侧的数是最大的,所以下一轮循环时可不予考虑,时间复杂度为O(n^2). 一.冒泡排 ...

最新文章

  1. 微软为什么从 C/C++ 转向了 Rust?
  2. JAVA中堆栈和内存分配原理
  3. Linux Centos7 下安装Mysql - 8.0.15
  4. 用户案例 - 3Cs
  5. 13-Qt6 QMap
  6. [考试]20150528
  7. 扎心!天天写代码,方向真的对吗?
  8. 在MapPath的Path参数中不允许字符'..',解决方法。
  9. 像科学家一样思考python 第二版 epub_Kindle Python教程 – 像计算机科学家一样思考python(第2版) epub,mobi...
  10. LeetCode 758. 字符串中的加粗单词(Trie树)
  11. 江苏省计算机一级题库软件百度云,江苏省计算机一级B题库11
  12. IO多路复用(select,poll,epoll)详解
  13. L2-012. 关于堆的判断-PAT甲级真题(堆的建立,向上调整)
  14. .NET Windows服务开发流程
  15. 《C陷阱与缺陷》读书笔记
  16. MySQL 读写分离配置实践
  17. 均值(average)与期望(mean)
  18. 书摘---创业36条军规8:资本的五个问题
  19. li怎么让文字在图片下面_div+css(ul li)实现图片上文字下列表布局
  20. “双减”政策下的少儿编程市场:前8月融资12起,资本加持下何时跑出“独角兽”?...

热门文章

  1. java的递归算法_如果要用Java实现算法,一定慎用递归
  2. 注意力机制可视化_最强NLP模型BERT可视化学习
  3. 遇见好链接(我还并没有看)
  4. mysql 开启binglog
  5. ElasticSearch-6.3.2 linux 安装
  6. Java之Integer源码
  7. 剖析微软Hyper-V的最佳部署方式
  8. _GUN_SOURCE宏
  9. Oracle Warehouse Builder 自动化ETL处置处罚历程(1)
  10. python可以处理矩阵吗_Python 稀疏矩阵处理