From 2cc2d9a969505163c293efa52b48b3c045c15ce3 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 23 Aug 2021 12:01:00 +0800 Subject: [PATCH 01/67] =?UTF-8?q?[refractor&feat]=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=AE=8C=E5=96=84&=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 +++--- .../几道常见的字符串算法题.md | 0 .../几道常见的链表算法题.md | 0 .../algorithms}/剑指offer部分编程题.md | 0 .../data-structure/bloom-filter.md | 45 ++--- .../data-structure/pictures/图/图.png | Bin .../pictures/图/广度优先搜索1.drawio | 0 .../pictures/图/广度优先搜索1.png | Bin .../pictures/图/广度优先搜索2.drawio | 0 .../pictures/图/广度优先搜索2.png | Bin .../pictures/图/广度优先搜索3.drawio | 0 .../pictures/图/广度优先搜索3.png | Bin .../pictures/图/广度优先搜索4.drawio | 0 .../pictures/图/广度优先搜索4.png | Bin .../pictures/图/广度优先搜索5.drawio | 0 .../pictures/图/广度优先搜索5.png | Bin .../pictures/图/广度优先搜索6.drawio | 0 .../pictures/图/广度优先搜索6.png | Bin .../图/广度优先搜索图示.drawio | 0 .../pictures/图/广度优先搜索图示.png | Bin .../图/无向图的邻接矩阵存储.drawio | 0 .../图/无向图的邻接矩阵存储.png | Bin .../图/无向图的邻接表存储.drawio | 0 .../图/无向图的邻接表存储.png | Bin .../图/有向图的邻接矩阵存储.drawio | 0 .../图/有向图的邻接矩阵存储.png | Bin ...图的邻接矩阵存储的副本.drawio | 0 .../图/有向图的邻接表存储.drawio | 0 .../图/有向图的邻接表存储.png | Bin .../pictures/图/深度优先搜索1.drawio | 0 .../pictures/图/深度优先搜索1.png | Bin .../pictures/图/深度优先搜索2.drawio | 0 .../pictures/图/深度优先搜索2.png | Bin .../pictures/图/深度优先搜索3.drawio | 0 .../pictures/图/深度优先搜索3.png | Bin .../pictures/图/深度优先搜索4.drawio | 0 .../pictures/图/深度优先搜索4.png | Bin .../pictures/图/深度优先搜索5.drawio | 0 .../pictures/图/深度优先搜索5.png | Bin .../pictures/图/深度优先搜索6.drawio | 0 .../pictures/图/深度优先搜索6.png | Bin .../图/深度优先搜索图示.drawio | 0 .../pictures/图/深度优先搜索图示.png | Bin .../pictures/堆/删除堆顶元素1.png | Bin .../pictures/堆/删除堆顶元素2.png | Bin .../pictures/堆/删除堆顶元素3.png | Bin .../pictures/堆/删除堆顶元素4.png | Bin .../pictures/堆/删除堆顶元素5.png | Bin .../pictures/堆/删除堆顶元素6.png | Bin .../pictures/堆/堆-插入元素1.png | Bin .../pictures/堆/堆-插入元素2.png | Bin .../pictures/堆/堆-插入元素3.png | Bin .../data-structure/pictures/堆/堆1.png | Bin .../data-structure/pictures/堆/堆2.png | Bin .../pictures/堆/堆排序1.png | Bin .../pictures/堆/堆排序2.png | Bin .../pictures/堆/堆排序3.png | Bin .../pictures/堆/堆排序4.png | Bin .../pictures/堆/堆排序5.png | Bin .../pictures/堆/堆排序6.png | Bin .../pictures/堆/堆的存储.png | Bin .../data-structure/pictures/堆/建堆1.png | Bin .../data-structure/pictures/堆/建堆2.png | Bin .../data-structure/pictures/堆/建堆3.png | Bin .../data-structure/pictures/堆/建堆4.png | Bin .../pictures/树/中序遍历.drawio | 1 + .../pictures/树/中序遍历.png | Bin 0 -> 35285 bytes .../pictures/树/中序遍历2.drawio | 1 + .../pictures/树/中序遍历2.png | Bin 0 -> 11447 bytes .../pictures/树/先序遍历.drawio | 1 + .../pictures/树/先序遍历.png | Bin 0 -> 35364 bytes .../pictures/树/后序遍历.drawio | 1 + .../pictures/树/后序遍历.png | Bin 0 -> 35267 bytes .../pictures/树/完全二叉树.drawio | 1 + .../pictures/树/完全二叉树.png | Bin 0 -> 28497 bytes .../pictures/树/平衡二叉树.drawio | 1 + .../pictures/树/平衡二叉树.png | Bin 0 -> 20533 bytes .../data-structure/pictures/树/斜树.drawio | 1 + .../data-structure/pictures/树/斜树.png | Bin 0 -> 20671 bytes .../pictures/树/满二叉树.drawio | 1 + .../pictures/树/满二叉树.png | Bin 0 -> 20027 bytes .../pictures/树/链式存储二叉树.drawio | 1 + .../pictures/树/链式存储二叉树.png | Bin 0 -> 22043 bytes .../pictures/树/顺序存储.drawio | 1 + .../pictures/树/顺序存储.png | Bin 0 -> 47860 bytes .../pictures/树/顺序存储2.drawio | 1 + .../pictures/树/顺序存储2.png | Bin 0 -> 54408 bytes .../线性数据结构/单链表2.png | Bin .../线性数据结构/双向循环链表.png | Bin .../线性数据结构/双向链表.png | Bin .../循环队列-堆满.png | Bin .../pictures/线性数据结构/数组.png | Bin .../pictures/线性数据结构/栈.png | Bin .../栈实现浏览器倒退和前进.drawio | 0 .../栈实现浏览器倒退和前进.png | Bin .../pictures/线性数据结构/队列.png | Bin .../顺序队列假溢出.png | Bin .../data-structure/图.md | 0 .../data-structure/堆.md | 3 + docs/cs-basics/data-structure/树.md | 174 +++++++++++++++++ docs/cs-basics/data-structure/红黑树.md | 14 ++ .../data-structure/线性数据结构.md | 0 .../{ => cs-basics}/network/HTTPS中的TLS.md | 0 .../network/images/Cut-Trough-Switching_0.gif | Bin docs/{ => cs-basics}/network/images/isp.png | Bin .../network/images/七层体系结构图.png | Bin .../network/images/传输层.png | Bin .../network/images/应用层.png | Bin .../network/images/数据链路层.png | Bin .../network/images/物理层.png | Bin .../network/images/网络层.png | Bin .../万维网的大致工作工程.png | Bin .../network/计算机网络.md | 0 .../network/计算机网络知识总结.md | 0 .../{ => cs-basics}/operating-system/Shell.md | 0 .../{ => cs-basics}/operating-system/basis.md | 0 .../operating-system/images/Linux-Logo.png | Bin .../operating-system/images/Linux之父.png | Bin .../images/Linux权限命令.png | Bin .../images/Linux权限解读.png | Bin .../images/Linux目录树.png | Bin .../operating-system/images/linux.png | Bin .../operating-system/images/macos.png | Bin .../operating-system/images/unix.png | Bin .../operating-system/images/windows.png | Bin .../images/修改文件权限.png | Bin .../images/文件inode信息.png | Bin .../images/用户态与内核态.png | Bin .../{ => cs-basics}/operating-system/linux.md | 0 .../dataStructures-algorithms/数据结构.md | 179 ------------------ docs/java/{ => tips}/JAD反编译tricks.md | 90 ++++----- ...手教你定位常见Java性能问题.md | 160 ++++++++-------- 132 files changed, 376 insertions(+), 356 deletions(-) rename docs/{dataStructures-algorithms => cs-basics/algorithms}/几道常见的字符串算法题.md (100%) rename docs/{dataStructures-algorithms => cs-basics/algorithms}/几道常见的链表算法题.md (100%) rename docs/{dataStructures-algorithms => cs-basics/algorithms}/剑指offer部分编程题.md (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/bloom-filter.md (74%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/图.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索1.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索2.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索3.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索4.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索4.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索5.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索5.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索6.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索6.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索图示.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/广度优先搜索图示.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/无向图的邻接矩阵存储.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/无向图的邻接矩阵存储.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/无向图的邻接表存储.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/无向图的邻接表存储.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/有向图的邻接矩阵存储.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/有向图的邻接矩阵存储.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/有向图的邻接矩阵存储的副本.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/有向图的邻接表存储.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/有向图的邻接表存储.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索1.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索2.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索3.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索4.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索4.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索5.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索5.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索6.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索6.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索图示.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/图/深度优先搜索图示.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素4.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素5.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/删除堆顶元素6.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆-插入元素1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆-插入元素2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆-插入元素3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序4.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序5.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆排序6.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/堆的存储.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/建堆1.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/建堆2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/建堆3.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/堆/建堆4.png (100%) create mode 100644 docs/cs-basics/data-structure/pictures/树/中序遍历.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/中序遍历.png create mode 100644 docs/cs-basics/data-structure/pictures/树/中序遍历2.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/中序遍历2.png create mode 100644 docs/cs-basics/data-structure/pictures/树/先序遍历.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/先序遍历.png create mode 100644 docs/cs-basics/data-structure/pictures/树/后序遍历.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/后序遍历.png create mode 100644 docs/cs-basics/data-structure/pictures/树/完全二叉树.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/完全二叉树.png create mode 100644 docs/cs-basics/data-structure/pictures/树/平衡二叉树.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/平衡二叉树.png create mode 100644 docs/cs-basics/data-structure/pictures/树/斜树.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/斜树.png create mode 100644 docs/cs-basics/data-structure/pictures/树/满二叉树.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/满二叉树.png create mode 100644 docs/cs-basics/data-structure/pictures/树/链式存储二叉树.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/链式存储二叉树.png create mode 100644 docs/cs-basics/data-structure/pictures/树/顺序存储.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/顺序存储.png create mode 100644 docs/cs-basics/data-structure/pictures/树/顺序存储2.drawio create mode 100644 docs/cs-basics/data-structure/pictures/树/顺序存储2.png rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/单链表2.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/双向循环链表.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/双向链表.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/循环队列-堆满.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/数组.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/栈.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/栈实现浏览器倒退和前进.drawio (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/栈实现浏览器倒退和前进.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/队列.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/pictures/线性数据结构/顺序队列假溢出.png (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/图.md (100%) rename docs/{dataStructures-algorithms => cs-basics}/data-structure/堆.md (99%) create mode 100644 docs/cs-basics/data-structure/树.md create mode 100644 docs/cs-basics/data-structure/红黑树.md rename docs/{dataStructures-algorithms => cs-basics}/data-structure/线性数据结构.md (100%) rename docs/{ => cs-basics}/network/HTTPS中的TLS.md (100%) rename docs/{ => cs-basics}/network/images/Cut-Trough-Switching_0.gif (100%) rename docs/{ => cs-basics}/network/images/isp.png (100%) rename docs/{ => cs-basics}/network/images/七层体系结构图.png (100%) rename docs/{ => cs-basics}/network/images/传输层.png (100%) rename docs/{ => cs-basics}/network/images/应用层.png (100%) rename docs/{ => cs-basics}/network/images/数据链路层.png (100%) rename docs/{ => cs-basics}/network/images/物理层.png (100%) rename docs/{ => cs-basics}/network/images/网络层.png (100%) rename docs/{ => cs-basics}/network/images/计算机网络知识点总结/万维网的大致工作工程.png (100%) rename docs/{ => cs-basics}/network/计算机网络.md (100%) rename docs/{ => cs-basics}/network/计算机网络知识总结.md (100%) rename docs/{ => cs-basics}/operating-system/Shell.md (100%) rename docs/{ => cs-basics}/operating-system/basis.md (100%) rename docs/{ => cs-basics}/operating-system/images/Linux-Logo.png (100%) rename docs/{ => cs-basics}/operating-system/images/Linux之父.png (100%) rename docs/{ => cs-basics}/operating-system/images/Linux权限命令.png (100%) rename docs/{ => cs-basics}/operating-system/images/Linux权限解读.png (100%) rename docs/{ => cs-basics}/operating-system/images/Linux目录树.png (100%) rename docs/{ => cs-basics}/operating-system/images/linux.png (100%) rename docs/{ => cs-basics}/operating-system/images/macos.png (100%) rename docs/{ => cs-basics}/operating-system/images/unix.png (100%) rename docs/{ => cs-basics}/operating-system/images/windows.png (100%) rename docs/{ => cs-basics}/operating-system/images/修改文件权限.png (100%) rename docs/{ => cs-basics}/operating-system/images/文件inode信息.png (100%) rename docs/{ => cs-basics}/operating-system/images/用户态与内核态.png (100%) rename docs/{ => cs-basics}/operating-system/linux.md (100%) delete mode 100644 docs/dataStructures-algorithms/数据结构.md rename docs/java/{ => tips}/JAD反编译tricks.md (68%) rename docs/java/{ => tips}/手把手教你定位常见Java性能问题.md (54%) diff --git a/README.md b/README.md index 8e214899..786e0ccf 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ ### 基础 -**知识点/面试题:**(必看:+1: ) +**知识点/面试题** : (必看:+1: ) 1. **[Java 基础知识](docs/java/basis/Java基础知识.md)** 2. **[Java 基础知识疑难点/易错点](docs/java/basis/Java基础知识疑难点.md)** @@ -71,11 +71,11 @@ **重要知识点详解:** -2. **线程池**:[Java 线程池学习总结](./docs/java/multi-thread/java线程池学习总结.md)、[拿来即用的线程池最佳实践](./docs/java/multi-thread/拿来即用的线程池最佳实践.md) -4. [ ThreadLocal 关键字解析](docs/java/multi-thread/万字详解ThreadLocal关键字.md) -5. [并发容器总结](docs/java/multi-thread/并发容器总结.md) -6. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md) -7. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md) +1. **线程池**:[Java 线程池学习总结](./docs/java/multi-thread/java线程池学习总结.md)、[拿来即用的线程池最佳实践](./docs/java/multi-thread/拿来即用的线程池最佳实践.md) +2. [ ThreadLocal 关键字解析](docs/java/multi-thread/万字详解ThreadLocal关键字.md) +3. [并发容器总结](docs/java/multi-thread/并发容器总结.md) +4. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md) +5. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md) ### JVM (必看 :+1:) @@ -95,28 +95,38 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle 1. **Java 8** :[Java 8 新特性总结](docs/java/new-features/Java8新特性总结.md)、[Java8常用新特性总结](docs/java/new-features/java8-common-new-features.md) 、[Java 8 学习资源推荐](docs/java/new-features/Java8教程推荐.md)、[Java8 forEach 指南](docs/java/new-features/Java8foreach指南.md) 2. **Java9~Java15** : [一文带你看遍 JDK9~15 的重要新特性!](./docs/java/new-features/java新特性总结.md) +### 小技巧 + +1. [JAD 反编译](docs/java/tips/JAD反编译tricks.md) +2. [手把手教你定位常见 Java 性能问题](./docs/java/tips/手把手教你定位常见Java性能问题.md) + ## 计算机基础 👉 **[图解计算机基础 PDF 下载](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd)** 。 ### 操作系统 -1. [操作系统常见问题总结!](docs/operating-system/basis.md) -2. [后端程序员必备的 Linux 基础知识](docs/operating-system/linux.md) -3. [Shell 编程入门](docs/operating-system/Shell.md) +1. [操作系统常见问题总结!](docs/cs-basics/operating-system/basis.md) +2. [后端程序员必备的 Linux 基础知识总结](docs/cs-basics/operating-system/linux.md) +3. [Shell 编程入门](docs/cs-basics/operating-system/Shell.md) ### 网络 -1. [计算机网络常见面试题](docs/network/计算机网络.md) -2. [计算机网络基础知识总结](docs/network/计算机网络知识总结.md) +1. [计算机网络常见面试题](docs/cs-basics/network/计算机网络.md) +2. [计算机网络基础知识总结](docs/cs-basics/network/计算机网络知识总结.md) ### 数据结构 -- **图解数据结构:** - 1. [线性数据结构 :数组、链表、栈、队列](docs/dataStructures-algorithms/data-structure/线性数据结构.md) - 2. [图](docs/dataStructures-algorithms/data-structure/图.md) - 3. [堆](docs/dataStructures-algorithms/data-structure/堆.md) -- [不了解布隆过滤器?一文给你整的明明白白!](docs/dataStructures-algorithms/data-structure/bloom-filter.md) +**图解数据结构:** + +1. [线性数据结构 :数组、链表、栈、队列](docs/cs-basics/data-structure/线性数据结构.md) +2. [图](docs/cs-basics/data-structure/图.md) +3. [堆](docs/cs-basics/data-structure/堆.md) +4. [树](docs/cs-basics/data-structure/树.md) :重点关注[红黑树](docs/cs-basics/data-structure/红黑树.md)、B-,B+,B*树、LSM树 + +其他常用数据结构 : + +1. [布隆过滤器](docs/cs-basics/data-structure/bloom-filter.md) ### 算法 @@ -125,11 +135,13 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle - [算法学习书籍+资源推荐](https://www.zhihu.com/question/323359308/answer/1545320858) 。 - [如何刷Leetcode?](https://www.zhihu.com/question/31092580/answer/1534887374) -**常见算法问题总结:** +**常见算法问题总结** : -- [几道常见的字符串算法题总结 ](docs/dataStructures-algorithms/几道常见的字符串算法题.md) -- [几道常见的链表算法题总结 ](docs/dataStructures-algorithms/几道常见的链表算法题.md) -- [剑指 offer 部分编程题](docs/dataStructures-algorithms/剑指offer部分编程题.md) +- [几道常见的字符串算法题总结 ](docs/cs-basics/algorithms/几道常见的字符串算法题.md) +- [几道常见的链表算法题总结 ](docs/cs-basics/algorithms/几道常见的链表算法题.md) +- [剑指 offer 部分编程题](docs/cs-basics/algorithms/剑指offer部分编程题.md) + +另外,[GeeksforGeeks]( https://www.geeksforgeeks.org/fundamentals-of-algorithms/) 这个网站总结了常见的算法 ,比较全面系统。 ## 数据库 @@ -354,7 +366,6 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读: ## 工具 -1. **Java** :[JAD 反编译](docs/java/JAD反编译tricks.md)、[手把手教你定位常见 Java 性能问题](./docs/java/手把手教你定位常见Java性能问题.md) 2. **Git** :[Git 入门](docs/tools/Git.md) 3. **Github** : [Github小技巧](docs/tools/Github技巧.md) 4. **Docker** : [Docker 基本概念解读](docs/tools/Docker.md) 、[Docker从入门到上手干事](docs/tools/Docker从入门到实战.md) @@ -378,7 +389,8 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读: ### 待办 -- [ ] 数据结构总结重构 +- [ ] 计算机网络知识点完善 +- [ ] 分布式常见理论和算法总结完善 ### 捐赠支持 diff --git a/docs/dataStructures-algorithms/几道常见的字符串算法题.md b/docs/cs-basics/algorithms/几道常见的字符串算法题.md similarity index 100% rename from docs/dataStructures-algorithms/几道常见的字符串算法题.md rename to docs/cs-basics/algorithms/几道常见的字符串算法题.md diff --git a/docs/dataStructures-algorithms/几道常见的链表算法题.md b/docs/cs-basics/algorithms/几道常见的链表算法题.md similarity index 100% rename from docs/dataStructures-algorithms/几道常见的链表算法题.md rename to docs/cs-basics/algorithms/几道常见的链表算法题.md diff --git a/docs/dataStructures-algorithms/剑指offer部分编程题.md b/docs/cs-basics/algorithms/剑指offer部分编程题.md similarity index 100% rename from docs/dataStructures-algorithms/剑指offer部分编程题.md rename to docs/cs-basics/algorithms/剑指offer部分编程题.md diff --git a/docs/dataStructures-algorithms/data-structure/bloom-filter.md b/docs/cs-basics/data-structure/bloom-filter.md similarity index 74% rename from docs/dataStructures-algorithms/data-structure/bloom-filter.md rename to docs/cs-basics/data-structure/bloom-filter.md index bfb7efe7..9b5afd6d 100644 --- a/docs/dataStructures-algorithms/data-structure/bloom-filter.md +++ b/docs/cs-basics/data-structure/bloom-filter.md @@ -6,18 +6,18 @@ 2. 布隆过滤器的原理介绍。 3. 布隆过滤器使用场景。 4. 通过 Java 编程手动实现布隆过滤器。 -5. 利用Google开源的Guava中自带的布隆过滤器。 +5. 利用 Google 开源的 Guava 中自带的布隆过滤器。 6. Redis 中的布隆过滤器。 ### 1.什么是布隆过滤器? 首先,我们需要了解布隆过滤器的概念。 -布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。 +布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于 1970 年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。 ![布隆过滤器示意图](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-11/布隆过滤器-bit数组.png) -位数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1。这样申请一个 100w 个元素的位数组只占用 1000000Bit / 8 = 125000 Byte = 125000/1024 kb ≈ 122kb 的空间。 +位数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1。这样申请一个 100w 个元素的位数组只占用 1000000Bit / 8 = 125000 Byte = 125000/1024 kb ≈ 122kb 的空间。 总结:**一个名叫 Bloom 的人提出了一种来检索元素是否在给定大集合中的数据结构,这种数据结构是高效且性能很好的,但缺点是具有一定的错误识别率和删除难度。并且,理论情况下,添加到集合中的元素越多,误报的可能性就越大。** @@ -35,11 +35,9 @@ 举个简单的例子: - - ![布隆过滤器hash计算](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-11/布隆过滤器-hash运算.png) -如图所示,当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后将对应的位数组的下标设置为 1(当位数组初始化时,所有位置均为0)。当第二次存储相同字符串时,因为先前的对应位置已设置为 1,所以很容易知道此值已经存在(去重非常方便)。 +如图所示,当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后将对应的位数组的下标设置为 1(当位数组初始化时,所有位置均为 0)。当第二次存储相同字符串时,因为先前的对应位置已设置为 1,所以很容易知道此值已经存在(去重非常方便)。 如果我们需要判断某个字符串是否在布隆过滤器中时,只需要对给定字符串再次进行相同的哈希计算,得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。 @@ -49,7 +47,7 @@ ### 3.布隆过滤器使用场景 -1. 判断给定数据是否存在:比如判断一个数字是否存在于包含大量数字的数字集中(数字集很大,5亿以上!)、 防止缓存穿透(判断请求的数据是否有效避免直接绕过缓存请求数据库)等等、邮箱的垃圾邮件过滤、黑名单功能等等。 +1. 判断给定数据是否存在:比如判断一个数字是否存在于包含大量数字的数字集中(数字集很大,5 亿以上!)、 防止缓存穿透(判断请求的数据是否有效避免直接绕过缓存请求数据库)等等、邮箱的垃圾邮件过滤、黑名单功能等等。 2. 去重:比如爬给定网址的时候对已经爬取过的 URL 去重。 ### 4.通过 Java 编程手动实现布隆过滤器 @@ -206,7 +204,7 @@ true 实际使用如下: -我们创建了一个最多存放 最多 1500个整数的布隆过滤器,并且我们可以容忍误判的概率为百分之(0.01) +我们创建了一个最多存放 最多 1500 个整数的布隆过滤器,并且我们可以容忍误判的概率为百分之(0.01) ```java // 创建布隆过滤器对象 @@ -224,7 +222,7 @@ System.out.println(filter.mightContain(1)); System.out.println(filter.mightContain(2)); ``` -在我们的示例中,当`mightContain()` 方法返回 *true* 时,我们可以99%确定该元素在过滤器中,当过滤器返回 *false* 时,我们可以100%确定该元素不存在于过滤器中。 +在我们的示例中,当`mightContain()` 方法返回 _true_ 时,我们可以 99%确定该元素在过滤器中,当过滤器返回 _false_ 时,我们可以 100%确定该元素不存在于过滤器中。 **Guava 提供的布隆过滤器的实现还是很不错的(想要详细了解的可以看一下它的源码实现),但是它有一个重大的缺陷就是只能单机使用(另外,容量扩展也不容易),而现在互联网一般都是分布式的场景。为了解决这个问题,我们就需要用到 Redis 中的布隆过滤器了。** @@ -234,17 +232,17 @@ System.out.println(filter.mightContain(2)); Redis v4.0 之后有了 Module(模块/插件) 功能,Redis Modules 让 Redis 可以使用外部模块扩展其功能 。布隆过滤器就是其中的 Module。详情可以查看 Redis 官方对 Redis Modules 的介绍 :https://redis.io/modules -另外,官网推荐了一个 RedisBloom 作为 Redis 布隆过滤器的 Module,地址:https://github.com/RedisBloom/RedisBloom。其他还有: +另外,官网推荐了一个 RedisBloom 作为 Redis 布隆过滤器的 Module,地址:https://github.com/RedisBloom/RedisBloom。其他还有: - redis-lua-scaling-bloom-filter(lua 脚本实现):https://github.com/erikdubbelboer/redis-lua-scaling-bloom-filter -- pyreBloom(Python中的快速Redis 布隆过滤器) :https://github.com/seomoz/pyreBloom +- pyreBloom(Python 中的快速 Redis 布隆过滤器) :https://github.com/seomoz/pyreBloom - ...... RedisBloom 提供了多种语言的客户端支持,包括:Python、Java、JavaScript 和 PHP。 -#### 6.2 使用Docker安装 +#### 6.2 使用 Docker 安装 -如果我们需要体验 Redis 中的布隆过滤器非常简单,通过 Docker 就可以了!我们直接在 Google 搜索 **docker redis bloomfilter** 然后在排除广告的第一条搜素结果就找到了我们想要的答案(这是我平常解决问题的一种方式,分享一下),具体地址:https://hub.docker.com/r/redislabs/rebloom/ (介绍的很详细 )。 +如果我们需要体验 Redis 中的布隆过滤器非常简单,通过 Docker 就可以了!我们直接在 Google 搜索 **docker redis bloomfilter** 然后在排除广告的第一条搜素结果就找到了我们想要的答案(这是我平常解决问题的一种方式,分享一下),具体地址:https://hub.docker.com/r/redislabs/rebloom/ (介绍的很详细 )。 **具体操作如下:** @@ -252,15 +250,15 @@ RedisBloom 提供了多种语言的客户端支持,包括:Python、Java、Ja ➜ ~ docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest ➜ ~ docker exec -it redis-redisbloom bash root@21396d02c252:/data# redis-cli -127.0.0.1:6379> +127.0.0.1:6379> ``` -#### 6.3常用命令一览 +#### 6.3 常用命令一览 -> 注意: key : 布隆过滤器的名称,item : 添加的元素。 +> 注意: key : 布隆过滤器的名称,item : 添加的元素。 -1. **`BF.ADD `**:将元素添加到布隆过滤器中,如果该过滤器尚不存在,则创建该过滤器。格式:`BF.ADD {key} {item}`。 -2. **`BF.MADD `** : 将一个或多个元素添加到“布隆过滤器”中,并创建一个尚不存在的过滤器。该命令的操作方式`BF.ADD`与之相同,只不过它允许多个输入并返回多个值。格式:`BF.MADD {key} {item} [item ...]` 。 +1. **`BF.ADD`**:将元素添加到布隆过滤器中,如果该过滤器尚不存在,则创建该过滤器。格式:`BF.ADD {key} {item}`。 +2. **`BF.MADD`** : 将一个或多个元素添加到“布隆过滤器”中,并创建一个尚不存在的过滤器。该命令的操作方式`BF.ADD`与之相同,只不过它允许多个输入并返回多个值。格式:`BF.MADD {key} {item} [item ...]` 。 3. **`BF.EXISTS` ** : 确定元素是否在布隆过滤器中存在。格式:`BF.EXISTS {key} {item}`。 4. **`BF.MEXISTS`** : 确定一个或者多个元素是否在布隆过滤器中存在格式:`BF.MEXISTS {key} {item} [item ...]`。 @@ -268,19 +266,19 @@ root@21396d02c252:/data# redis-cli 这个命令的格式如下: -`BF.RESERVE {key} {error_rate} {capacity} [EXPANSION expansion] `。 +`BF.RESERVE {key} {error_rate} {capacity} [EXPANSION expansion]`。 下面简单介绍一下每个参数的具体含义: 1. key:布隆过滤器的名称 -2. error_rate :误报的期望概率。这应该是介于0到1之间的十进制值。例如,对于期望的误报率0.1%(1000中为1),error_rate应该设置为0.001。该数字越接近零,则每个项目的内存消耗越大,并且每个操作的CPU使用率越高。 -3. capacity: 过滤器的容量。当实际存储的元素个数超过这个值之后,性能将开始下降。实际的降级将取决于超出限制的程度。随着过滤器元素数量呈指数增长,性能将线性下降。 +2. error_rate :误报的期望概率。这应该是介于 0 到 1 之间的十进制值。例如,对于期望的误报率 0.1%(1000 中为 1),error_rate 应该设置为 0.001。该数字越接近零,则每个项目的内存消耗越大,并且每个操作的 CPU 使用率越高。 +3. capacity: 过滤器的容量。当实际存储的元素个数超过这个值之后,性能将开始下降。实际的降级将取决于超出限制的程度。随着过滤器元素数量呈指数增长,性能将线性下降。 可选参数: -- expansion:如果创建了一个新的子过滤器,则其大小将是当前过滤器的大小乘以`expansion`。默认扩展值为2。这意味着每个后续子过滤器将是前一个子过滤器的两倍。 +- expansion:如果创建了一个新的子过滤器,则其大小将是当前过滤器的大小乘以`expansion`。默认扩展值为 2。这意味着每个后续子过滤器将是前一个子过滤器的两倍。 -#### 6.4实际使用 +#### 6.4 实际使用 ```shell 127.0.0.1:6379> BF.ADD myFilter java @@ -294,4 +292,3 @@ root@21396d02c252:/data# redis-cli 127.0.0.1:6379> BF.EXISTS myFilter github (integer) 0 ``` - diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/图.png b/docs/cs-basics/data-structure/pictures/图/图.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/图.png rename to docs/cs-basics/data-structure/pictures/图/图.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索1.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索1.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索1.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索1.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索1.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索1.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索2.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索2.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索2.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索2.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索2.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索2.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索3.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索3.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索3.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索3.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索3.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索3.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索4.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索4.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索4.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索4.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索4.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索4.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索4.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索4.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索5.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索5.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索5.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索5.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索5.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索5.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索5.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索5.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索6.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索6.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索6.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索6.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索6.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索6.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索6.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索6.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索图示.drawio b/docs/cs-basics/data-structure/pictures/图/广度优先搜索图示.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索图示.drawio rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索图示.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索图示.png b/docs/cs-basics/data-structure/pictures/图/广度优先搜索图示.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/广度优先搜索图示.png rename to docs/cs-basics/data-structure/pictures/图/广度优先搜索图示.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接矩阵存储.drawio b/docs/cs-basics/data-structure/pictures/图/无向图的邻接矩阵存储.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接矩阵存储.drawio rename to docs/cs-basics/data-structure/pictures/图/无向图的邻接矩阵存储.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接矩阵存储.png b/docs/cs-basics/data-structure/pictures/图/无向图的邻接矩阵存储.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接矩阵存储.png rename to docs/cs-basics/data-structure/pictures/图/无向图的邻接矩阵存储.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接表存储.drawio b/docs/cs-basics/data-structure/pictures/图/无向图的邻接表存储.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接表存储.drawio rename to docs/cs-basics/data-structure/pictures/图/无向图的邻接表存储.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接表存储.png b/docs/cs-basics/data-structure/pictures/图/无向图的邻接表存储.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/无向图的邻接表存储.png rename to docs/cs-basics/data-structure/pictures/图/无向图的邻接表存储.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储.drawio b/docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储.drawio rename to docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储.png b/docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储.png rename to docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储的副本.drawio b/docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储的副本.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接矩阵存储的副本.drawio rename to docs/cs-basics/data-structure/pictures/图/有向图的邻接矩阵存储的副本.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接表存储.drawio b/docs/cs-basics/data-structure/pictures/图/有向图的邻接表存储.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接表存储.drawio rename to docs/cs-basics/data-structure/pictures/图/有向图的邻接表存储.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接表存储.png b/docs/cs-basics/data-structure/pictures/图/有向图的邻接表存储.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/有向图的邻接表存储.png rename to docs/cs-basics/data-structure/pictures/图/有向图的邻接表存储.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索1.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索1.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索1.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索1.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索1.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索1.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索2.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索2.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索2.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索2.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索2.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索2.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索3.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索3.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索3.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索3.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索3.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索3.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索4.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索4.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索4.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索4.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索4.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索4.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索4.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索4.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索5.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索5.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索5.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索5.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索5.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索5.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索5.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索5.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索6.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索6.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索6.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索6.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索6.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索6.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索6.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索6.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索图示.drawio b/docs/cs-basics/data-structure/pictures/图/深度优先搜索图示.drawio similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索图示.drawio rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索图示.drawio diff --git a/docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索图示.png b/docs/cs-basics/data-structure/pictures/图/深度优先搜索图示.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/图/深度优先搜索图示.png rename to docs/cs-basics/data-structure/pictures/图/深度优先搜索图示.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素1.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素1.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素2.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素2.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素3.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素3.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素4.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素4.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素4.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素4.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素5.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素5.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素5.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素5.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素6.png b/docs/cs-basics/data-structure/pictures/堆/删除堆顶元素6.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/删除堆顶元素6.png rename to docs/cs-basics/data-structure/pictures/堆/删除堆顶元素6.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素1.png b/docs/cs-basics/data-structure/pictures/堆/堆-插入元素1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素1.png rename to docs/cs-basics/data-structure/pictures/堆/堆-插入元素1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素2.png b/docs/cs-basics/data-structure/pictures/堆/堆-插入元素2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素2.png rename to docs/cs-basics/data-structure/pictures/堆/堆-插入元素2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素3.png b/docs/cs-basics/data-structure/pictures/堆/堆-插入元素3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆-插入元素3.png rename to docs/cs-basics/data-structure/pictures/堆/堆-插入元素3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆1.png b/docs/cs-basics/data-structure/pictures/堆/堆1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆1.png rename to docs/cs-basics/data-structure/pictures/堆/堆1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆2.png b/docs/cs-basics/data-structure/pictures/堆/堆2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆2.png rename to docs/cs-basics/data-structure/pictures/堆/堆2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序1.png b/docs/cs-basics/data-structure/pictures/堆/堆排序1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序1.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序2.png b/docs/cs-basics/data-structure/pictures/堆/堆排序2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序2.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序3.png b/docs/cs-basics/data-structure/pictures/堆/堆排序3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序3.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序4.png b/docs/cs-basics/data-structure/pictures/堆/堆排序4.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序4.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序4.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序5.png b/docs/cs-basics/data-structure/pictures/堆/堆排序5.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序5.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序5.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序6.png b/docs/cs-basics/data-structure/pictures/堆/堆排序6.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆排序6.png rename to docs/cs-basics/data-structure/pictures/堆/堆排序6.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/堆的存储.png b/docs/cs-basics/data-structure/pictures/堆/堆的存储.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/堆的存储.png rename to docs/cs-basics/data-structure/pictures/堆/堆的存储.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/建堆1.png b/docs/cs-basics/data-structure/pictures/堆/建堆1.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/建堆1.png rename to docs/cs-basics/data-structure/pictures/堆/建堆1.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/建堆2.png b/docs/cs-basics/data-structure/pictures/堆/建堆2.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/建堆2.png rename to docs/cs-basics/data-structure/pictures/堆/建堆2.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/建堆3.png b/docs/cs-basics/data-structure/pictures/堆/建堆3.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/建堆3.png rename to docs/cs-basics/data-structure/pictures/堆/建堆3.png diff --git a/docs/dataStructures-algorithms/data-structure/pictures/堆/建堆4.png b/docs/cs-basics/data-structure/pictures/堆/建堆4.png similarity index 100% rename from docs/dataStructures-algorithms/data-structure/pictures/堆/建堆4.png rename to docs/cs-basics/data-structure/pictures/堆/建堆4.png diff --git a/docs/cs-basics/data-structure/pictures/树/中序遍历.drawio b/docs/cs-basics/data-structure/pictures/树/中序遍历.drawio new file mode 100644 index 00000000..f8fe81d2 --- /dev/null +++ b/docs/cs-basics/data-structure/pictures/树/中序遍历.drawio @@ -0,0 +1 @@ +7Vtbk6I4FP41eZwukgBJHr1g727tVk1VV+30PNKSVmbQuIit7q/fBAISBLVbFHfa8sHkJORyzpcv5xwR4MFs8xj7i+lfIuARQFawAXgIEILQcuWXkmwzCWMkE0ziMNCddoKn8F+uhZaWrsKAL42OiRBREi5M4VjM53ycGDI/jsXa7PYqInPWhT/he4KnsR/tS7+FQTLNpBSRnfw3Hk6m+czQZVnLzM87650sp34g1iUR9gAexEIkWWm2GfBIKS/XS/bcqKG1WFjM58kpD6yenT8ev/39O3VCf/C2ZpuF7X/Ro7z50UpvGCA3kuP1X9SSk63Wg/vPSq2z/yrmyZdlaqWe7ICcxWbXKEsT9d3Lx5CLecmFWgnFiEiuThpRVvrraZjwp4U/Vi1riSMpmyazSNagLPrLRWbZ13DDA7WIMIoGIhJxOhB+feXueCzlyyQWP3mpJSDsxbKKyd94nPBNo/pgYRSJZi5mPIm3sot+gGBtRw1kzHR9XYKFFk1LiMhlvgbipBh5ZytZ0OZ6h+lQjemqKp4HPXUGZG0u5txUq9x3vH0uV76XK0O1b6uobXUtm4MHe6emoke5DrGKx/zABrA+zn484ckxjO7bpaR3p0bvuSzmkZ+Eb+Zy64yhZ/gqQrmRndktYpidWBV7ZtvUT5WPX3Ug5jwgaiMCkU1sN1+JHtYm1GzF5iyZkvZmSYFT6OTjWMKNNLBc+POPM0GJTDLBoJ4aClk23a/BGJSajGF3zRj2tazc/0RWdq0bs7JzLSsPP5GVHWRa2SEdW9m9lpUfP5GVmXtjVibn+nibMHkulb/nPp0s7xw8Vcn9u8IrLCpX9grt/4NX6FaAQuAHvUKKqIk4hq7q+NFzAVYbRFhH4JLD0irBEh6EZQcAc7oEGKneN+yjYYdDD4UdrNOwg52JvhZR4Z6ICtwlKiiCDy7GDrapdEgQNI3pUPjAIGO27AZtNw9c301J2D2AGIdada1XAkxOs5d3e7xP5Pa49MbcHliXljzX7zl8wdT7Pccusi78HqvelldyfMw8FWQmcCB8INAhiBIHOZhWhj/5zrJqh8nvLFq7hGsxEGpkIEU0LTKQfYSBsukaGEiSQWIeCZNB9JEp040W+VE4mcvqWCKYS3lfUUs49qOebpiFQRA1cVssVvNAMdmwLW5ilfSKtc9Ndg3e0cW4qTlX2jIA0B0AilOcyuXUOQCa06gtA8C9AyD1R28NAM0Z1pYBAO8ASC/8CgBo1wBw971R6QI+6arWoqkHESdTMRFzP/pTiIU2yA+eJFv9zoO/SkRDbsV6cDpKxuVvXHwwGXeys3meOeqypBcJCkefKCik1q0Fha3lKt+V2n5/Cr3N80dOPICdpqWgZQZsxIwKXYjrWt8bFbKDmUwJzy7zUnWZzIu4BM7dJZAthNyYS5APfHkAkDsAFBlUg4LOAdD8JmXLAMB3AKhLxb41ADQnBs/zQod9rzcalF/DOOhm/jIWJpXf2N3OLYz3/c1LhH35j+NZ1HdtlzPH8VGXM+vYVdCHarJwngP6Huh5wLOBjNV6EHguYBZgA+AhQNOCycnjInbanToZXzGG8f5BfAyT6epFjUk9wCjwGKAEMDkLVZOq6RxAKWCoiY31KoYFp8en0AK0a+8FORnrA+apQs8GdNjKJr8OR0dXL/crNSA9EbXfEWCuXotUvlIFAT1c0glRBUZSWwxAv5d2HqUFojrkx/rmOCzyX3jU98c/J6m8OrlUjT7D0Nb1UijeTz8theLQZEIb7zNhQXtnUqGs7v6SkoVHuz/2YO8/ \ No newline at end of file diff --git a/docs/cs-basics/data-structure/pictures/树/中序遍历.png b/docs/cs-basics/data-structure/pictures/树/中序遍历.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad5782c8bde94ea9d99f36987b69e2578f20024 GIT binary patch literal 35285 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 Ja$)_i{~rKnb#4Fv literal 0 HcmV?d00001 diff --git a/docs/cs-basics/data-structure/pictures/树/中序遍历2.drawio b/docs/cs-basics/data-structure/pictures/树/中序遍历2.drawio new file mode 100644 index 00000000..31e3097a --- /dev/null +++ b/docs/cs-basics/data-structure/pictures/树/中序遍历2.drawio @@ -0,0 +1 @@ +5ZhNc5swEIZ/jY/uYLDBHGPsuIdmpmMfmhxlkEGtYKkQBvLrK1niq46bJm0Zpj6hfSWtpH12NSMmlheXW4bS6AECTCemEZQTaz0xzdnMsMVHKpVSXNdRQshIoAe1wp48Yy0aWs1JgLPeQA5AOUn7og9Jgn3e0xBjUPSHHYH2V01RiC+EvY/opfqFBDxS6tJ0Wv0jJmFUrzyzXdUTo3qwPkkWoQCKjmRtJpbHALhqxaWHqQxeHRc17/5Kb7MxhhP+OxN22UPg7CLH2z06MV1Pt0bxPNVeTojm+sAT06bC3+ogt8wrHQf7ey73uTpCwqfZmdKdGGAu0rLtFK1Qfu9qH2Izh1rUQWg8mmJ3AqIwVkVEON6nyJc9hcgjoUU8psKaiSbKUkX2SEocyE0QSj2gwM6OrOMR274v9Iwz+IY7PYHjHgyjWfyEGcfl1fDNGigimzHEmLNKDNET7DojdSLPa7vopIWWok5G1BrSiRg2nltWoqFxvQGdeRVdlqLk/fQ6CaAE72WcjaaW+z8oO+7IKFtDUV7dEOW5NTLK86Eor2+IsjUfGeXFUJS3N0R56bjjomwPRXlzQ5QX5shq2bmMaCAeDtpMIJGhZZAngQzaWoYBGI8ghATRTwCpDu9XzHmlnz0o59APvogOqx7l/A+L2nzq9q1L7VxZlbbey0ie4deExJEhZz5+/U3BEQsxf23cJXGGKeLk1N/HX+e3HKpK72+oSh1jZFXqDlOlJeGdIhXWU12Vot2WqDT+fYX+QUXpqZ+BCI/ty/enu7e5i2sX6kbQs7p/IN7qSF0ZF47O6JvzvJQNwmx/pKjh7e8oa/MD \ No newline at end of file diff --git a/docs/cs-basics/data-structure/pictures/树/中序遍历2.png b/docs/cs-basics/data-structure/pictures/树/中序遍历2.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6956b9d09c3503aaa88c0d3ed833d0f9b9d1a6 GIT binary patch literal 11447 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 b=Il4%yripmCIPsRd`2Cnqg<+J^W?t(mQb_Y literal 0 HcmV?d00001 diff --git a/docs/cs-basics/data-structure/pictures/树/先序遍历.drawio b/docs/cs-basics/data-structure/pictures/树/先序遍历.drawio new file mode 100644 index 00000000..b92e5c29 --- /dev/null +++ b/docs/cs-basics/data-structure/pictures/树/先序遍历.drawio @@ -0,0 +1 @@ +7Vtbk6I4FP41eZwuIDfyKIq9D7tVU9u1tTOPKGllGo2L2Or8+k0kIEFQ2xvOtOWDyUnI5ZwvJ985IoDdyeo5CWbjv0TIY+BY4QrAHnAc27aI/FKSdSZhjGaCURKFutNW8BL95FpoaekiCvnc6JgKEafRzBQOxXTKh6khC5JELM1uryI2Z50FI74jeBkG8a703yhMx5nUdehW/gePRuN8ZpuwrGUS5J31TubjIBTLkgj6AHYTIdKsNFl1eayUl+sle67f0FosLOHT9JgHEuvvH2+rZPbTI6O56/T+WTrPX/Qo70G80BsGDonleN5ALTldaz2Q/xZqnd6rmKZf5hsrdWQHB89W20ZZGqnvTj6GXMwgF2olFCM6cnXSiLLiLcdRyl9mwVC1LCWOpGycTmJZs2UxmM8yy75GKx6qRURx3BWxSDYDwddXToZDKZ+niXjjpZaQsoFlFZO/8yTlq0b12YVRJJq5mPA0Wcsu+gGCtB01kCHW9WUJFlo0LiEilwUaiKNi5K2tZEGb6wOmc2pMV1XxNOyoMyBrUzHlplrlvpP1t3Lle7nSU/u2itpa17I5eLhzaip6lOsQi2TI92wA6uMcJCOeHsLorl1Kesc1es9lCY+DNHo3l1tnDD3DVxHJjWzNblPD7IRU7JltUz9VPn6VgaiFnxwXOdR2EEUkX4keFkHXbIXmLJmSdmbZAKfQyelYgo1uYD4Lpqd7gpIzyQTdetdQyLLpfg+PQZnpMVDbHgPdysreJ7Iytu/MyvhWVu59IisjaFoZw5atTG5l5edPZGWX3pmV6bkcbxWl30rl7zmnk+UtwVOVnN8VrLCo3JgVol+BFeIKUAg9lRVC10Qcdm5K/NxzAVYbRFgH4JLD0irB0t4LyxYAhtsEGKneN/hEgBHi7gs7cKthBzsTfRdEBTkSFbBNVFBoPxEIMUQulhe4bRoTI/uJ2YwhV7YgYtETXRIiexCDkVXXeiPA5Fz7+rTH/0S0B7M7oz12XVryXN6z/4Kp5z2HLrI2eI9Vb8sbER/XuDBsZl4n1H6iNqaSSGOJIrcy/NF3ll07TD4Jql3CrTyQ0+iBlKO5oAeyD3igbLoGDySdQWoeCdOD6CNTdjdaFMTRaCqrQ4lgLuWeci3RMIg7umEShWHc5NsSsZiGypP1LpV2typpd7Lrm1AN3p2r+abmXOmFAeA8AKCMS0wAoNYB0JxGvTAA8AMAGz56bwBozrBeGADwAQDl8qv0FLUNALLLRiUFfNFVrUVTDyJJx2IkpkH8pxAzbZAfPE3X+p2HYJGKhtyK9YRbSsblb1ycmIw7mmyeZ466LOlVgsL+JwoKqX1vQeHFcpUfSm1/PIV+yfNHjzyAraalmBmvUTMoxBTWtX40KHT3JjIlOttMS9UlMq/CCMiDEcgW4t4ZI8gHvj4A6AMAyhmgewNA84uUFwYAegAAlH4PuxsANOcFzyOhHa/nd/vltzD2sszfxsKk+hN76xaGu3TzGlFf/tt4FvTdmnHmOD7IOLOObcV8Tk0SzsfA80HHBz4CMlTr2MAngFmAdYHvAHdTMH3ysAidtqdOhleMQbh7EJ+jdLwYqDFdHzAX+Ay4FDA5i6smVdNh4LqAOU3eWK+iV/j05Bi3YKPae0FOxjzAfFXoIOD2LrLJr73+wdXL/UoNSCai9tsHjOi1SOUrVVDQgSWdUFVgdGOLLvA6m879TYGqDjmVuzsfFgcDHnvB8G20kVcnl6rRZ9hGul6KxL3N50KReOVdkCIfVvKEhds70xXK6vYfKVl4tP1fD/T/Bw== \ No newline at end of file diff --git a/docs/cs-basics/data-structure/pictures/树/先序遍历.png b/docs/cs-basics/data-structure/pictures/树/先序遍历.png new file mode 100644 index 0000000000000000000000000000000000000000..5c80cedf7d6561c8aa8c55d7762d4ea5edd17b02 GIT binary patch literal 35364 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