JavaScript 数据结构——树
概念
树是一种分层数据的抽象模型。
树的常用操作:
- 深度优先遍历
- 广度优先遍历
实现
JavaScript中没有树,但是可用Object
和Array
来构建树,如上图中的树可表示为:
const tree = {val: 'A',children: [{val: 'B',children: [{val: 'D',children: [{val: 'J',children: []}]}, {val: 'E',children: []}, {val: 'F',children: []}]}, {val: 'C',children: [{val: 'G',children: []}, {val: 'H',children: []}]}]
};
遍历
深度优先遍历
尽可能深地搜索树的分支。
- 访问根节点
- 对根节点的子节点依次进行深度优先遍历
如上图所示,深度优先遍历这棵树,访问顺序为A - B - D - K - E - F - C - G - H
。
// 深度优先遍历
const dfs = (root) => {// 访问根节点console.log(root.val);// 对根节点的子节点依次进行深度优先遍历root.children.forEach(item => { dfs(item) });
};
广度优先遍历
先访问离根节点最近的节点。
- 新建队列,根节点入队
- 队头出队并访问
- 把队头的子节点依次入队
- 循环2、3步骤,直到队列空
如上图所示,广度优先遍历这棵树,访问顺序为A - B - C - D - E - F - G - H - K
,即按照一级、二级、三级节点的顺序依次访问。
// 广度优先遍历
const bfs = (root) => {// 创建队列const queue = [root];while (queue.length > 0) {// 获取根节点,根节点出队const n = queue.shift();// 访问队头console.log(n.val);// 队头的子节点依次入队n.children.forEach(item => {queue.push(item)});}
};
JavaScript 数据结构——树相关推荐
- JavaScript数据结构——树(Tree)
概念和结构 树由若干节点组成. 每个结点有零个或多个子结点:没有父结点的结点称为根结点:每一个非根结点有且只有一个父结点:除了根结点外,每个子结点可以分为多个不相交的子树. 我们这里实现二叉搜索树.二 ...
- JavaScript数据结构——树Tree
5.1 --简述 二叉树.AVL树.红黑树 根节点: 位于数顶部的节点: 内部节点: 存在子元素的节点: 外部节点: 没有子元素的节点: 树的深度: 节点的深度取决于它的祖先节点的数量: 树的高度: ...
- JavaScript数据结构——树
文章目录 二叉树 二叉搜索树 insert() 树的遍历 中序 先序 后序 最小节点 最大节点 搜索指定值 一个树结构含有父子关系的节点,除了根节点外,每一个节点都一个父节点和0个或者多个子节点.如下 ...
- JavaScript数据结构与算法 - 树
1. 树数据结构 树是一种分层数据的抽象模型 树是一种非顺序的数据结构 树对于存储需要快速查找的数据非常有用 常见例子:如公司的组织架构图 树结构: 2. 二叉树和二叉搜索树 二叉树: 只能有左右两个 ...
- JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)
注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...
- JavaScript数据结构和算法简述——数组
为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...
- JavaScript数据结构和算法简述——前言
为什么要使用数据结构和算法(程序=数据结构+算法) 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.包括数组.链表.栈.二叉树.哈希表等. 算法是对这些结构中 ...
- JavaScript数据结构——图的实现
在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...
- 你必须要知道的JavaScript数据结构与面试题解答
英文原文 | https://dev.to/educative/7-javascript-data-structures-you-must-know-4k0m 原文作者 | Ryan Thelin和A ...
最新文章
- 机器学习和深度学习的区别 深度学习的完全取代机器学习吗
- ai旋转扭曲_会了这些AI技巧:效率翻倍
- Phython 3 笔记2 —— 基础语法
- 数学习题:求解不定方程a^2 + b^2 = 3025
- matlab程序约束条件,求Xij中i,j约束条件下的程序
- Django关联数据库时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'...
- java linux ping ip,java linux ping命令
- nodejs通过later实现定时执行任务
- Laravel使用腾讯云COS服务
- 音视频即时通讯解决方案
- ArrayList源码分析--底层扩容机制
- 解决谷歌浏览器翻译不能用问题
- matlab中wavread函数,关于wavread函数的用法
- 【产品】 产品设计:ID工业设计、MD结构设计、HW硬件设计和SW软件设计详解
- nginx出现499现象及原因
- 皮皮高清影视播放器2015官方版
- gdc函数(最大公约数)
- docker之制作镜像
- Android流媒体开发之 自定义一个完备的log模块
- 《CSS世界》笔记二:盒模型四大家族