* 一种分层数据的抽象模型
* 前端工作中常见的树包括:DOM树、级联选择、树形控件...
* JS中没有树,但是可以用Object 和 Array 构建树
* *深度、广度优先遍历、先中后序遍历
# 深度优先遍历(dfs)
* 访问根节点
* 对根节点的children挨个进行深度优先遍历。
![](https://img.kancloud.cn/09/2f/092fcfd42fc9630fe4516189b6458c96_992x300.png)
# 广度优先遍历(bfs)
* 新建一个队列,把根节点入队
* 把队头出队并访问
* 把队头的children挨个入队
* 重复第二、第三步,知道队列为空
![](https://img.kancloud.cn/e2/72/e27234d04ce6a89910ab3c1b688debfd_1164x532.png)
# 二叉树先中后遍历
## 先序遍历(preorder)的算法口诀`[根-左-右]`
* 访问根节点
* 对根节点的`左`子树进行先序遍历
* 对根节点的`右`子树进行先序遍历
![](https://img.kancloud.cn/20/3a/203a36ce0998fc9ffede7a589720023b_866x514.png)
![](https://img.kancloud.cn/a2/4c/a24cf4539ba37bbe2eb1a3fea5790196_936x592.png)
## 中序遍历(inorder)的算法口诀`[左-根-右]`
* 对根节点的左子树进行中序遍历
* 访问根节点
* 对根节点的右子树进行中序遍历
![](https://img.kancloud.cn/f5/7f/f57f7e8ab424ba145e3118035e701754_846x536.png)
非递归,栈+循环实现:
![](https://img.kancloud.cn/4c/b1/4cb1f97b742d38d9b6cf19b61a59f88e_746x730.png)
## 后序遍历(postorder)的算法口诀`[左-右-根]`
* 对根节点的左子树进行后序遍历
* 对根节点的右子树进行后序遍历
* 访问根节点
![](https://img.kancloud.cn/8e/b7/8eb7e65ba84ad9da8d1a370811b12e4b_928x574.png)
非递归,栈+循环实现:
![](https://img.kancloud.cn/00/05/0005c0acf591445674a2961095825771_800x848.png)
LeetCode:104. 二叉树的最大深度
![](https://img.kancloud.cn/37/ad/37ad3002c695d83e10e84aa470290c01_930x654.png)
LeetCode:111. 二叉树的最小深度
![](https://img.kancloud.cn/aa/ed/aaed8014e208ae3e5f177d2ff7b03288_994x718.png)
遍历 JSON 的所有节点值:
遍历json节点,顺便把路径输出来
![](https://img.kancloud.cn/f6/db/f6dbe68119a6eeb268957c00210f9636_1044x642.png)
改进加个判断版:
![](https://img.kancloud.cn/43/21/43217227d69bea790c95bb2ef0580096_1184x740.png)
- 前言
- 工作中的一些记录
- 破解快手直播间的webSocket的连接
- 快手「反」反爬虫的研究记录
- HTML AND CSS
- 遇到的一些还行的css笔试题
- css常见面试题
- JavaScript 深度剖析
- ES6到ESNext新特性
- 关于http与缓存
- 关于页面性能
- 关于浏览器的重排(reflow、layout)与重绘
- 手写函数节流
- 手写promise
- 手写函数防抖
- 手写图片懒加载
- 手写jsonp
- 手写深拷贝
- 手写new
- 数据结构和算法
- 前言
- 时间复杂度
- 栈
- 队列
- 集合
- 字典
- 链表
- 树
- 图
- 堆
- 排序
- 搜索
- Webpack
- Webpack原理与实践
- Vue
- Vuejs的Virtual Dom的源码实现
- minVue
- Vuex实现原理
- 一道关于diff算法的面试题
- Vue2源码笔记:源码目录设计
- vue-router源码分析(v4.x)
- React及周边
- 深入理解redux(一步步实现一个 redux)
- React常见面试题汇总
- Taro、小程序等
- TypeScript
- CI/CD
- docker踩坑笔记
- jenkins
- 最后