【摘要】 网上的相关教程非常多,基础知识自行搜索即可。习题主要选自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. LeetCode实战:Nim 游戏
  2. kali如何安装netcat_Netcat常用方法汇总
  3. 【刷题】LOJ 6011 「网络流 24 题」运输问题
  4. 华为光伏usb适配器_华为系列原装充电器拆解第三弹:比亚迪版华为10W充电器
  5. 湖北文理学院数学与计算机科学学院,数学与计算机科学学院计算机协会十一月总结会议...
  6. PHP消息通信机制测试代码
  7. Linux时间与NTP
  8. Python中元组,列表,字典的区别
  9. Matlab数字图像处理学习记录【5】——彩色图像处理
  10. 关于区块链的一点经济学思考
  11. 地址总线、数据总线、控制总线详细解释
  12. Spring boot 集成邮件通知及线程异步发送
  13. SQL中对一张表同时升序和降序的排序要求
  14. Python数据分析实战(1)数据分析概述
  15. Rack集成Sentry
  16. 解决Android studio运行代码手机出现xxx keeps stopping
  17. 表示整数x的绝对值大于5时值为真的c语言表达式是——.,1表示'整数x的绝对值大于5'时值为'真'的C语言表达式是_____...
  18. 【iOS开发】页面卡顿监控和优化
  19. uni-app 苹果登录
  20. windows 配置域名

热门文章

  1. dfa转正则表达式_GitHub - hidva/re2dot: 根据正则表达式生成其对应 DFA 的状态转移图...
  2. python获取pc微信好友列表_python使用itchat获取微信好友列表
  3. python读取csv数据画直方图_用csv文件作为inpu在python中绘制直方图
  4. .NET垃圾回收机制 转
  5. L1-046 整除光棍
  6. 【重要】ionic和Angular的安装步骤
  7. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
  8. iOS开发---- 开发错误汇总及解决方法
  9. 车辆特征系数——车速的计算
  10. Java项目经验是程序员成长的重要经验