概念

树是一种分层数据的抽象模型。

树的常用操作:

  • 深度优先遍历
  • 广度优先遍历

实现

JavaScript中没有树,但是可用ObjectArray来构建树,如上图中的树可表示为:

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: []}]}]
};

遍历

深度优先遍历

尽可能地搜索树的分支。

  1. 访问节点
  2. 对根节点的子节点依次进行深度优先遍历

如上图所示,深度优先遍历这棵树,访问顺序为A - B - D - K - E - F - C - G - H

// 深度优先遍历
const dfs = (root) => {// 访问根节点console.log(root.val);// 对根节点的子节点依次进行深度优先遍历root.children.forEach(item => { dfs(item) });
};

广度优先遍历

先访问离根节点最近的节点。

  1. 新建队列根节点入队
  2. 队头出队并访问
  3. 把队头的子节点依次入队
  4. 循环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 数据结构——树相关推荐

  1. JavaScript数据结构——树(Tree)

    概念和结构 树由若干节点组成. 每个结点有零个或多个子结点:没有父结点的结点称为根结点:每一个非根结点有且只有一个父结点:除了根结点外,每个子结点可以分为多个不相交的子树. 我们这里实现二叉搜索树.二 ...

  2. JavaScript数据结构——树Tree

    5.1 --简述 二叉树.AVL树.红黑树 根节点: 位于数顶部的节点: 内部节点: 存在子元素的节点: 外部节点: 没有子元素的节点: 树的深度: 节点的深度取决于它的祖先节点的数量: 树的高度: ...

  3. JavaScript数据结构——树

    文章目录 二叉树 二叉搜索树 insert() 树的遍历 中序 先序 后序 最小节点 最大节点 搜索指定值 一个树结构含有父子关系的节点,除了根节点外,每一个节点都一个父节点和0个或者多个子节点.如下 ...

  4. JavaScript数据结构与算法 - 树

    1. 树数据结构 树是一种分层数据的抽象模型 树是一种非顺序的数据结构 树对于存储需要快速查找的数据非常有用 常见例子:如公司的组织架构图 树结构: 2. 二叉树和二叉搜索树 二叉树: 只能有左右两个 ...

  5. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  6. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

  7. JavaScript数据结构和算法简述——前言

    为什么要使用数据结构和算法(程序=数据结构+算法)         数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.包括数组.链表.栈.二叉树.哈希表等.        算法是对这些结构中 ...

  8. JavaScript数据结构——图的实现

    在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...

  9. 你必须要知道的JavaScript数据结构与面试题解答

    英文原文 | https://dev.to/educative/7-javascript-data-structures-you-must-know-4k0m 原文作者 | Ryan Thelin和A ...

最新文章

  1. 机器学习和深度学习的区别 深度学习的完全取代机器学习吗
  2. ai旋转扭曲_会了这些AI技巧:效率翻倍
  3. Phython 3 笔记2 —— 基础语法
  4. 数学习题:求解不定方程a^2 + b^2 = 3025
  5. matlab程序约束条件,求Xij中i,j约束条件下的程序
  6. Django关联数据库时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'...
  7. java linux ping ip,java linux ping命令
  8. nodejs通过later实现定时执行任务
  9. Laravel使用腾讯云COS服务
  10. 音视频即时通讯解决方案
  11. ArrayList源码分析--底层扩容机制
  12. 解决谷歌浏览器翻译不能用问题
  13. matlab中wavread函数,关于wavread函数的用法
  14. 【产品】 产品设计:ID工业设计、MD结构设计、HW硬件设计和SW软件设计详解
  15. nginx出现499现象及原因
  16. 皮皮高清影视播放器2015官方版
  17. gdc函数(最大公约数)
  18. docker之制作镜像
  19. Android流媒体开发之 自定义一个完备的log模块
  20. 《CSS世界》笔记二:盒模型四大家族

热门文章

  1. OpenCV—python图像以数组形式输出
  2. 使用 gmail_如何更好地使用Gmail
  3. js获取控制浏览器,屏幕,对象宽度和高度,文件大小
  4. 干洗店收银系统应具备的功能
  5. 爬取B站弹幕(Java版本,附带deflate解压)
  6. 绩效管理学习之一、平衡记分卡BSC
  7. N73新手入门常见问题解答,想成为高手的必看!
  8. 记一次拯救者15isk拆机故障排查
  9. 域名相关概念解释~~
  10. 操作系统 —— (内存)内存管理