首发于 趣谈前端
javascript进阶必备的二叉树知识

javascript进阶必备的二叉树知识

前言

每当放完小长假,我都会习惯性的反思和复盘一下自己的技术,尤其是端午节。为什么我会写二叉树的文章呢?其实这涉及到程序员的一个成长性的问题。对于0-3年前端程序员来说,可能很少有机会涉及到数据结构和算法的工作中,除非去大厂或者做架构相关的工作。但是很多工作2-3年的前端工程师,业务工作已经相对熟悉了,各种技术或多或少也都使用过,那么在这个阶段,对于每个有追求的程序员,是不是应该突破一下自己的技术瓶颈,去研究一些更深层次的知识呢?没错,这个阶段我们最应该了解的就是数据结构算法设计模式相关的知识,设计模式算法笔者在之前的文章中已经系统的总结过了,感兴趣的可以学习了解一下。

接下来笔者就系统的总结一下二叉树相关的知识,并且通过实际代码一步步来带大家实现一个二叉搜索树

二叉树介绍

二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分

二叉树中的节点最多只能有两个子节点:左侧子节点右侧子节点。我们接下来主要来实现一个二叉搜索树(BST)。它是二叉树的一种,但是只允许你在左侧节点存储比父节点小的值,在右侧节点存储比父节点大(或者等于)的值。如下图:

接下来我们就一起实现一下BST树。

实现一个二叉搜索(BST)树

在实现之前,我们需要先分析一下BST(二叉搜索)树。我们要想构建一棵实用的树,我们需要节点方法,如下图所示:

我们先实现一个基类,如下:

我们按照上图的二叉搜索树的结构组织方式,来实现二叉树的基本方法。

其中insertNode方法用来判断在根节点不为空时的执行逻辑,具体代码如下:

以上代码即实现了BST的插入部分逻辑,具体使用方式如下:

以上代码生成的二叉树结构如下:


树的遍历

树的遍历是指访问树的每个节点并对它们进行某种操作的过程。具体分为中序遍历先序遍历后序遍历。接下来我会一一介绍给大家。

中序遍历

中序遍历是一种以从最小到最大的顺序访问所有节点的遍历方式,具体实现如下:

具体遍历过程如下图所示:


先序遍历

先序遍历是以优先于后代节点的顺序访问每一个节点。具体实现如下:

具体遍历如下图所示:


后序遍历

后序遍历是先访问节点的后代节点,再访问节点本身。。具体实现如下:

具体遍历顺序如下图所示:


树的搜索

我们一般的搜索会有最值搜索(也就是最大值,最小值,中值)和对特定值的搜索,接下来我们就来实现它们。

搜索特定的值

在BST树中搜索特定的值,具体实现如下:

实现逻辑也很简单,这里大家可以研究一下。

搜索最小值

由二叉树的结构特征我们可以发现,二叉树的最左端就是最小值,二叉树的最右端就是最大值,所以我们可以通过遍历来找到最小值,代码如下:

搜索最大值

和求最小值一样,最大值也可以用类似的方法,代码如下:

移除节点

移除BST中的节点相对来说比较复杂,需要考虑很多情况,具体情况如下: 1. 移除一个叶节点

2. 移除有一个左侧或右侧子节点的节点

3. 移除有两个子节点的节点


了解了上述3种情况之后我们开始实现删除节点的逻辑:

至此,一棵完整的搜索二叉树就实现了,是不是很有成就感呢?本文的源码以上传至笔者的github,感兴趣的朋友可以感受一下。

二叉树的应用

二叉树一般可以用来: 生成树结构 数据库的搜索算法 利用二叉树加密 计算目录和子目录中所有文件的大小, 打印一个结构化的文档 在游戏中用来做路径规划等

扩展

其实的类型还有很多种,这些不同类型的树在计算机中有很广泛的用途,比如红黑树B树自平衡二叉查找树空间划分树散列树希尔伯特R树等,如果对这些树敢兴趣的朋友可以深入研究一下,毕竟对自己未来的技术视野还是很有帮助的。

最后

如果想学习更多前端技能,实战学习路线, 欢迎在《趣谈前端》专栏学习讨论,共同探索前端的边界。


参考文献

二叉树 - baike.baidu.com/item/%E

深圳SEO优化公司成都推广网站推荐衢州百度爱采购推荐益阳外贸网站制作推荐内江企业网站设计推荐汕头网页设计孝感网站优化按天计费多少钱天津SEO按天计费公司德宏关键词按天扣费推荐晋城网站优化按天收费公司哈密如何制作网站多少钱大运关键词按天计费推荐常州网站设计模板价格迁安百度竞价多少钱内江seo网站推广南昌网站seo优化公司民治网站优化软件推荐宜春关键词按天收费龙华网站推广方案报价本溪SEO按天扣费公司菏泽百度网站优化公司宁波阿里店铺托管多少钱金华seo优化洛阳网络广告推广多少钱黄冈优化哪家好昌吉网站制作推荐揭阳百度爱采购公司天门设计公司网站多少钱清徐百姓网标王淄博SEO按天扣费价格商洛网站开发报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化