当前位置: 首页 > news >正文

第8章:树

1.树是什么

  1. 一种分层数据的抽象模型
  2. 前端工作中常见的树包括:DOM树,级联选择(省市区),树形控件,…
  3. javascript中没有树,但是可以用Object和Array构建树
  4. 请添加图片描述
    4.树的常用操作:深度/广度优先遍历,先中后序遍历

深度 / 广度遍历

深度优先遍历:尽可能深的搜索树的分支。如下图深度访问顺序:

请添加图片描述

广度优先遍历:先访问离跟节点最近的节点。

标题,目录,深入看每个目录下的小节。
请添加图片描述

深度优先遍历算法口诀:(其实就是一个递归)

1.访问根节点。
2.对根节点的children挨个进行深度优先遍历。
请添加图片描述
只有2步,写代码也只有2行代码,但是这2行代码实现了深度优先递归,在遍历的过程中被反复调用很多次。

const tree = {val: 'a',children: [{val: 'b',children: [{val: 'd',children: []},{val: 'e',children: []}]},{val: 'c',children: [{val: 'f',children: []},{val: 'g',children: []}]}]
}
const dfs = function (tree) {console.log(tree.val)// root.children.forEach((child) => dfs(child))root.children.forEach(dfs)
}

广度优先遍历算法口诀(对列)

1.新建一个队列,把根节点入队
2.把队头出队并访问
3.把队头的children挨个入队
4.重复第2,3步,知道队列为空。
请添加图片描述

const root = {val: 'a',children: [{val: 'b',children: [{val: 'd',children: []},{val: 'e',children: []}]},{val: 'c',children: [{val: 'f',children: []},{val: 'g',children: []}]}]
}const bfs = function (root) {const q = [root]while(q.length > 0) {const n = q.shift()console.log(n.val)if (n.children) {n.children.forEach(child => {q.push(child)})}}
}

二叉树的先,中, 后序的三种遍历

1.二叉树:树中每个树的节点最多有2个节点
2.在js中通常用Object来模拟二叉树

请添加图片描述

先序遍历:(根,左,右)

1.访问根节点
2.对结节点的左子树进行先序遍历
3.对根节点的右子树进行先序遍历
请添加图片描述

如上图:访问顺序:1,2, 4, 5,3, 6, 7

const bt = {val: 1,left: {val: 2,left: {val: 4,left: {},right: {}},right: {val: 5,left: {},right: {}}},right: {val: 3,left: {val: 6,left: {},right: {}},right: {val: 7,left: {},right: {}}}}const preorder = function (root) {if (!root) return // 访问根节点console.log(root.val)preorder(root.left)preorder(root.right)
}

中序遍历

http://www.lryc.cn/news/62358.html

相关文章:

  • Java基础学习(10)
  • Tomcat多实例部署实验
  • 无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...
  • 忙碌中也要记得休息,这两款好玩的游戏推荐给你
  • 四种方法可以实现判断字符串包含某个字符
  • ubuntu进程相关command
  • 7.参数校验
  • nginx简单介绍
  • 美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚
  • QML中【预计符号】和【Unknown Component M300】的红色警告解决方法
  • 聊聊「低代码」的实践之路
  • (一)服务发现组件 Eureka
  • 学会笔记本电脑录屏快捷键,轻松实现录屏!
  • ( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】
  • 算法训练Day40:343. 整数拆分 96.不同的二叉搜索树
  • 设计模式及代码
  • 9.java程序员必知必会类库之加密库
  • C技能树:for循环:九九乘法表
  • Win10老是蓝屏收集错误信息重启无效怎么办?
  • Redis入门学习笔记【五】Redis在分布式环境下常见的应用场景
  • Python ZIpFile 解惑:GBK 编码与乱码现象
  • 【LeetCode】213. 打家劫舍 II
  • 从初识RabbitMQ到安装了解
  • MySQL(六)-字符串函数的使用解析
  • Zookeeper集群搭建
  • 【计算机视觉 | 目标检测】OVD:Open-Vocabulary Object Detection 论文工作总结(共八篇)
  • C++入门基础知识[博客园长期更新......]
  • ( “树” 之 BST) 501. 二叉搜索树中的众数 ——【Leetcode每日一题】
  • openharmony内核中不一样的双向链表
  • 大文件删除不在回收站里怎么找回