数据结构 ~ 树

什么是树 - tree

一种分层数据的抽象模型;
如:DOM、级联选择、树形控件,js 中没有树

可以用 Object 构建树:

const tree = {val: 'a',children: [{val: 'a-1',children: [{val: 'a-1-1',children: []}]},{val: 'a-2',children: [{val: 'a-2-1',children: []}]}]
}

深度优先遍历: 尽可能深的搜索树的分支,即 children 递归
在这里插入图片描述
实现:

const dfs = root => {console.log(root.val) // a a-1 a-1-1 a-2 a-2-1root.children.forEach(e => {dfs(e)})
}
dfs(tree)

广度优先遍历: 先访问离根节点最近的节点
在这里插入图片描述
实现:

const bfs = root => {const q = [root] // 队列while (q.length) {const p = q.shift() // 队头出队、删除第一项(返回第一项)console.log(p.val) // a a-1 a-2 a-1-1 a-2-1p.children.forEach(e => {q.push(e)})}
}
bfs(tree)

二叉树

树中的节点最多只能有两个子节点;
使用 JS 模拟二叉树结构:

const tree = {val: 'a',left: {val: 'a-left',left: { val: 'a-left-left', left: null, right: null },right: { val: 'a-left-right', left: null, right: null }},right: {val: 'a-right',left: { val: 'a-right-left', left: null, right: null },right: { val: 'a-right-right', left: null, right: null }}
}

先序遍历:

访问根节点、对根节点的左子树先序先序遍历、对根节点的右子树进行先序遍历;
输出顺序:a、a-left、a-left-left、a-left-right、a-right、a-right-left、a-right-right

const preOrder = root => {if (!root) returnconsole.log(root.val)preOrder(root.left)preOrder(root.right)
}
preOrder(tree)

中序遍历:

对根节点左子树进行中序遍历、访问根节点、对根节点的右子树进行中序遍历;
输出顺序:a-left-left、a-left、a-left-right、a、a-right-left、a-right、a-right-right

const inOrder = root => {if (!root) returninOrder(root.left)console.log(root.val)inOrder(root.right)
}
inOrder(tree)

后序遍历:

根节点左子树进行后序遍历、根节点右子树进行后续遍历、访问根节点
输出顺序:a-left-left、a-left-right、a-left、a-right-left、a-right-right、a-right、a

const postOrder = root => {if (!root) returninOrder(root.left)inOrder(root.right)console.log(root.val)
}
inOrder(tree)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除,所以他不可以碎片整理,于是jvm支持两个参数,几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源,因为是并行运行,所以会有浮动垃圾。还有执行不确定性,垃圾收集完&a…

VsCode添加Vue模版代码片段

文章目录 VsCode添加Vue模版代码片段1. 复制一段已有要制作模板的Vue代码,比如:2. 粘贴到下方链接的工具网站,可自动生成模板代码的片段3. VsCode中设置代码片段3-1 打开菜单:首选项-用户片段3-2 出现如下的搜索栏,搜索…

Ubuntu下搭建Redis主从集群

目录 准备实例和配置 开启主从关系 测试配置 搭建的主从集群结构,只有主服务器与客户端进行写操作,通过主从同步数据,从服务器向客户端提供读操作 共包含三个节点,一个主节点,两个从节点。 这里我们会在同一台虚拟机…

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务,毕…

54、Mysql索引的数据结构,各自优劣

Mysql索引的数据结构,各自优劣 索引的数据结构和具体存储引擎的实现有关在MySQL中使用较多的索引有Hash索引,B树索引等InnoDB存储引擎的默认索引实现为: B树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求…

MySQL 备份和还原

目录 一、数据备份的重要性 二、数据库备份类型 2.1 物理备份 2.2 逻辑备份 1.完全备份 2.差异备份 3.增量备份 三、常见的备份方法 3.1 物理冷备 3.2 专用备份工具 mysqldump 或 mysqlhotcopy 3.3 启用二进制日志进行增量备份 3.4 第三方工具备份 四、MySQL完全备份…

校园跑腿小程序怎么做

校园跑腿小程序是为了方便学生在校园内解决各类需求而设计的一款应用程序。该小程序具有多种功能,包括校园跑腿、二手市场、骑手接单、校园表白墙、下单支付、学校代理以及佣金抽成等。 1. 校园跑腿: 该小程序提供校园内的跑腿服务,学生可以…

windows11 安装cuda和cudnn深度学习开发环境

首先先要确认自己的显卡最高能支持到cuda的版本,一般是不限制版本号的。 然后在官网地址下载: cuDNN的官网下载地址:cuDNN Archive | NVIDIA Developer CUDA 的下载地址:CUDA Toolkit Archive | NVIDIA Developer 有一点需要注…

微服务负载均衡器RibbonLoadBalancer实战

1.负载均衡介绍 负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…

【MongoDB实战】数据备份与恢复

场景: 需求: 解决方案: 步骤: Stage 1:【生产环境】修改备份文件映射 Stage 2:【生产环境】重新构建mongodb Stage 3:【客户环境】修改备份文件映射,同 Stage 1 Stage 4&#…

vue 如何发布并部署到服务器

一般情况npm run build即可 从而生成vue代码直接放到服务器即可 这里的具体情况要看package.json里面的配置从而使用命令 会生成dist就是该项目的发布包

【Android Framework系列】第7章 WMS原理

1 前言 前面【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcer启动流程我们分析了AMS启动以及Launcher启动的整体流程,那Launcher(Activity启动)后,UI是如何渲染到屏幕并且展示出来的呢?我们这…