多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 一种分层数据的抽象模型 * 前端工作中常见的树包括: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)