前言
红黑树是算法领域中一个著名的二叉查找树实现,它能够以较小的开销保持二叉查找树的平衡。具备平衡性质的二叉查找树能够极大地提高节点的查询速度。举个形象一点的例子:从一个十亿节点的红黑树中查找一个节点,所需要的查询次数不到 30,这不禁让人感叹算法的魅力。
红黑树是工程中最常见的二叉查找树的实现,例如在 Linux 的内存管理和进程管理中就用到了红黑树;Java 语言的集合包、C++语言的标准模板库中均提供了红黑树的实现类。
红黑树本身的设计很复杂,多数情况下我们也不需要自己去实现红黑树,但研究红黑树还是有意义的。一方面可以让学习者领略这种神奇的数据结构的奥妙,另一方面可以作为一种思维训练工具,提升自己的算法设计能力。
本文以漫画形式讲述红黑树,第一话讲解二叉查找树的概念和基本操作,包括节点查找、插入、删除;第二话讲解二叉查找树的缺点和红黑树的概念,以及红黑树的节点旋转操作;第三话讲解红黑树的节点插入操作;第四话讲解红黑树的节点删除操作;第五话和彩蛋部分讲解红黑树在插入修正和删除修正时,对各种 CASE 所进行的调整操作背后的思想。
红黑树的实现中,最难的部分在于实现节点的插入和删除时,要穷举所有可能的 CASE,然后对每种 CASE 进行处理。在理解节点的插入和删除的过程时,读者要把握住一个中心:每种 CASE 所进行的调整步骤都在尽量恢复插入/删除节点后所违反的红黑树特性,如果当前 CASE 解决不了,就转成另一种更接近问题解决状态的 CASE。每种 CASE 的所进行的调整步骤都是为了向解决问题的出口更靠近一步,直至找到出口。
漫画采用大量的图示来展示红黑树操作的诸多细节,作者力求详尽,因此篇幅略长。在 PDF 中给出了完整的二叉查找树定义 + 测试代码,以及红黑树定义 + 测试代码。两份代码均经过了若干次十万数量级随机节点插入和删除测试,结果均无误。读者可贴到自己的 IDE 中,结合本文讲解进行调试研究。
在电脑端本文阅读效果更佳。另外,读者可联系码海公众号博主(微信:geekoftaste)获取本漫画的完整 PDF 版本
正文
![](https://i-blog.csdnimg.cn/blog_migrate/40d7909ce01b1c8fde89bfbaa320d553.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1034c43a295115383bc6ab9535989805.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4abfedad2f46d754b48f677513179541.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6613253fa9ecc38fd271dcb2d7c99bed.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2367fe73d86d97a9b8ca91597363c6c6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/abea0a423eac5efd0ab836f6fcf03541.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b9b568a73e54df2d6afb7aa35ff47f9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d6b1654e0ebd9bb4e14f1cb736b5f49b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f309ba7b38a0ac17491470217fb107a4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6fb0d77b63bb6d9f70542011b2f532de.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6488846c1534f69465087ea892e9fa8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/66d24b179f503305b3ce2b3ef024b712.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5254ecc05513db2695e330f114ec2648.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5efe6a36d61754ace417ddd60a680f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65b7d6846ad7582904be94074488e13.png)
![](https://i-blog.csdnimg.cn/blog_migrate/be98df3a8ab699feecb907b8cda8f101.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bb3de92622f41aed2ac67e81a0c9195.png)
![](https://i-blog.csdnimg.cn/blog_migrate/faf37df72c89094d1055fb5b478cbc0b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/00860c9bf4cb5c8987aea69aec155a8c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7d602169c97ac3e33ab618929634ba5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1413f34ccc938ef65da8fbb8c7ed6f09.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9c73977ad0bd321d824165bbe09a8786.png)
![](https://i-blog.csdnimg.cn/blog_migrate/34f39753ff197b84645cf80e5d72049a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7bfb73da2241ae5af1f5868d1a80d047.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e47dcb197d4c968466016798da7d7945.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a7f9548a842b18549e0ee99f9828b18.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ec83afcb0d3420046809978b4f39b4a4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7234396c82f0c4e60281eb4968f27d3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a98ba905f167d3291cc429ecc67550b1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/86d8f3c064d22e33c832588c9a86ce16.png)
![](https://i-blog.csdnimg.cn/blog_migrate/82a88f6878e06d769ab4453e8f2786c1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fb17bbf9ff087d62253aab24749df025.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a1ea7ad5c1e7f3680e1462ba9d4c1a73.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0d79ccd5bcb5ca698a139918e6625240.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3bdd97c503da3eebfa23fa18018db404.png)
![](https://i-blog.csdnimg.cn/blog_migrate/96ac5f17212720254a42d19354b38fe9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bcf3d07a2b31ffba01e40f62a18cb5b1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69b5c27b73b4c82c4bd987b957395670.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5e5b6c7197bcc050a87d3b359fa97155.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a0e43d85e2074cad82de4b54056107a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e8b1c22b09ea69d72b9208ed28fa191.png)
![](https://i-blog.csdnimg.cn/blog_migrate/472a710cc9e4fa606c49f5cac5b77f88.png)
![](https://i-blog.csdnimg.cn/blog_migrate/11948eefc0ba28f8fcc09e56e7607fdc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6070edac41e3e624bbe83d1d884f5990.png)
![](https://i-blog.csdnimg.cn/blog_migrate/440f3feaff418bb2fc75175fa90cc59a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/16162065911a36fe0f59d3c698f62316.png)
![](https://i-blog.csdnimg.cn/blog_migrate/11e31061307b915fb91c9704774a9d1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a930a347717a98640e3284c0a7d75e7e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0511079ac4dde4b7d640c982ef5564bb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4807b6e413b7475fac67b3490f4a08e9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fd717406bc73a6f296b9c3807cce9342.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7691bd81fbef6aeee891562c8af32a11.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e2142ce701807850f4b9727c0c7c8e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9e2153df19dd0ae358e29e85d9897f6f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6212ec0c62848b47aebc598e66cde8e5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0e0f457ab9c47081e962ddc0124f446d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fad8dddf70a1b05f1d80b4d02c86288b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/deefe8f1dfe28f60f5d86ea80a60f77d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a4d55cbe1b9b03e1659b6f2bad7472d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/18774c8f486b9ea143aacf4fc0108a97.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4a08bbb26397f340a4d9605c1fb53731.png)
![](https://i-blog.csdnimg.cn/blog_migrate/551a78589441152140b777de0fa94ae5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5c21e3e14ec0ff8b30ce1552aa55c0fa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff9609c75f14b5c0859e981331e78d46.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0fc336ce1bc67344adecdff795ad6444.png)
![](https://i-blog.csdnimg.cn/blog_migrate/986a6503333a2c65572172e7432ed108.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8305a6a6a64d6e8724bb7755f228ba32.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0a19c0d20246a8950033c84c90baba2b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f422fd442c287f945a8944d583277f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ab4596ce8c1e85244e56da0f28650751.png)
![](https://i-blog.csdnimg.cn/blog_migrate/93fb7bef8ae5b4b8986fbb8043622b77.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ccfdca896cefd4ecd75d5251a7759510.png)
![](https://i-blog.csdnimg.cn/blog_migrate/97aebadc9d13e2c26d2369c814f6e9a8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7b0e0ad47afe5be38682109b4dd61b4e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e302fbd71acf559994b25d55aba1b8d9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/02423a0c0a4d038c459b0847cf780b27.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9aabf6bdc752aa7dbc5df346b145b224.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5ea938654e6178a9826e6a008ce777f3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b2f1bee7b29229480fad104c1fabed16.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9189fbdd9b0652794f60f068422b8e84.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1c587b327f118a7e853d10a2520fcbde.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a3793ed0f272f785c29818a6a28a0673.png)
![](https://i-blog.csdnimg.cn/blog_migrate/22b8d2b00746b08f443020d1078e376c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2d2f0e51c94012e2fde2a002b7488664.png)
![](https://i-blog.csdnimg.cn/blog_migrate/20bdf44d37a0a0ff379861fa722c781d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfe3c568092e764316b98b2092b08033.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3c6f21238d00caf5b040fb8f784696b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7dc8bfc2bfcdd4e0147c9f3f8d83aac.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b3098b115d648721f8d54a0f0e5836f8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9190d4a566b3939e51586ad2c88436b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3652ffddddf6d689baeacd535142b2fe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1f22ac02acb52ef4e1d158e1c40e1716.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1c1fb73e64fe387554aa30dbf9770c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/054f2485515007f0c7a697813c48be98.png)
![](https://i-blog.csdnimg.cn/blog_migrate/254cb920b8410b4643b9a4f258360c04.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b3e35e532b8245c0e15d2e20eb81c44b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/32fa5072cf0ee4f5439fe2ede0ad51f7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/19efa3068173905d023595c3ccfdeff9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2c08be1d9f270e9f8e0d940f67919958.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4ef058c5f8aeaf2955c7b5288198fdb8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9509791032d23fa8f16bdff199486117.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88f01dbf8019addc36618b4fd74098bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e0a663669345299b7e19b6a1c8609b95.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f47f204b254812498ee4982e6a23e3ab.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b992d13028ce725dd43498a0ec29a5a5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/37acce7af94cd434801e58257ba47138.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bf8616b51be5acefcf8f3b485f59dfff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ae81326dc00cdc9d21ec8be37048e496.png)
![](https://i-blog.csdnimg.cn/blog_migrate/145148c2bf94d10149f25123367477eb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ed44443d35f65c0417de06f67dce14e2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d1212c006a64f5ae4970a7db051f1eb3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9b437a24ef95e86372f9a8cdc4ea2d47.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e64b67cf934709dc5f1f19c40cf66a04.png)
![](https://i-blog.csdnimg.cn/blog_migrate/037437b567afa74e96dbc7611d22cd60.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4df0fe402d6d80d6a0a01ed806759ffc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/32ee2a25e9cf544ec28263116cfb93f1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c8e873c4926bacc5d65b3391f03bba80.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7bb6e01230aaba2f83fe0418a26bd113.png)
![](https://i-blog.csdnimg.cn/blog_migrate/675187c3276f2de7495dba153c9a1357.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7df60bb1f486f60167de07278b76ecb0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/30bdee8dff09ee0e1e33e622c6098844.png)
![](https://i-blog.csdnimg.cn/blog_migrate/84597bc5067e35bee77d5382a3f79e42.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d5a2982d6e4833f4aa9c97032d4e9acf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fc367a538ff634990cea93ebe350f40e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/08200a8abbc914e313eee449441afaf7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bffe4ef499c1574f3d90733312671fa9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c25364ef69491414e74c5e7ecf07391e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8389f17fd64a909911a7805bce638844.png)
![](https://i-blog.csdnimg.cn/blog_migrate/21494263a2ffc08dff989745284fca0b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a89f8f1662cf6d81b1e2da67ec9d4b27.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e34b49eeac3dbcbd5526f278f2f39591.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3207d69dd0e60d52c557392eee8ef5b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aa88667bbea6ee124b40b40f08405a71.png)
![](https://i-blog.csdnimg.cn/blog_migrate/43314f3a8d2cfcad46d7bcf85871c85c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/105dae4e028d53047493184a78adfc95.png)
![](https://i-blog.csdnimg.cn/blog_migrate/42ea2769c81d6cf65b2512b8c2021f7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a6b8fcbea53b08367e8170ca221debe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b4ccdf821995cd0a465aa938c77ceb25.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4637c96f578017afffd10abc07b4194a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/11b82df5a0c284d8fd54485f6ef6ff18.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1f33418059fbe0e1a8f46dcd48a7e7c5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/19b69bdcf16815387f3867475b08c07d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3bb421d33b84b713745ee8a6de414b00.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7a413cf5c96d565d3a51e344de3ae90.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ae57daac5c5f6887ad3a678976ee0e3a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/40a18f1e5ff877186e283b9c7519e6c7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/403fae0103244abbd713fe59252485d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/91fefb4d3413fc27c9f26a3b3bc21a2a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8022e4a2f5ce658a5051f8b782d3949b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ae65e93040bc08a5c81f035a1678bce3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3ca448bcb1154283415024562355f5bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/415a921d474a6c75d5426c64edf3bd32.png)
![](https://i-blog.csdnimg.cn/blog_migrate/106fd91e1529108449f538975b500cdf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09c6573c3bef2103dedcb2a3cb496cf6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/56935ebd80ea29e5e6176fafc8159d4d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d143e112cc0025f090677400d83347ce.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8b0d61cf8c3e76d008b87a33b0901dd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7eaa1f33e29e870fd9f960ddca94481.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a621a7da23a4c479eb5a3597ef6e238a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa7abfd53b52d65b02207775bca69e1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6119c193424117d9a168407f71249a07.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c9c6ad04e4c6835a4102401c34aa610c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c58ef68abfb65354def3b159de252b4c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/92d54d71e6349157a3f6c7faa540747d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/39784cecab1469d9ed58ec8e4dae1e1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/08743f59895bb583bc2415bbf91d0bae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4dedf51bb604be6773a7e647c592f33e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/979d978cd6f4f00ed1719063d898ffb5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5181ba8ec500220d36624dee2aba6d3d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4a022274d79b2768f56ac276fdc4910a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9284edc805a19b9a25f8a582371f945a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/76a7d3861a4f6f8773299fc9e6d9c4e9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/81712244cbba72f7ffd221e825739313.png)
![](https://i-blog.csdnimg.cn/blog_migrate/894cf9813121ed8bbdcdf1f9ec68c693.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3d523340d1d03d32a4b578e836f04764.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f1c7050d6933f861d6565831371e44ad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/acfb4f0c6c8b362e8755fefad0f2a23f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/30dc151c727a9970101e5a8ce5e9bd7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d9fcb83c792a794bbb4f1a58b8e977e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a4d1e06947b1acab13dd77c7993735d6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b2b4829520b74a67e2a49f5cb0e3086.png)
![](https://i-blog.csdnimg.cn/blog_migrate/29ff94dca85062b1765584a8b88b7801.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c48919316955f756820762cffcea5a4c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f6f51097df8cbd2aaf1d192e7982f333.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f7c65106264daff8091409a16e808cda.png)
![](https://i-blog.csdnimg.cn/blog_migrate/97fb3408a0d8c1bf6e97ec32c03c466e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e848d4995285d88d1706d46927ae31e7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/26523f7a7c73bda1761bd1cd2db87a8b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69fe8f552b181bcb106a24363307b8b3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/834d40bcdfcfc1a87fca50e4dfc06f1c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b9aabe834d8d1dd7b16c0c36d078c10.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de9034079a42fb45468f227c8d26ec6b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1e5b604a295033a508da120dce1d43a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/590a4e9a10855129faada582b98e0d8b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a35b0f389f910299815336269c839a4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/426ca9ca5ef0f16d434156c28e67ed31.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8350abbd3a85350edbcf473dcccb9c3c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff4d9937ef23bf193be5d4efa4754891.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ad632fb3a9a5dd49fa78e5d13030562b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b6ffd219a92c516097add73fa95891aa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/33649d05dacc3b6048c848ef66aa0ecf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5f6e1d5b4d19237f56a502da9b38d458.png)
![](https://i-blog.csdnimg.cn/blog_migrate/08e3a88f5f4dc7622b1a7e4ef44ce033.png)
![](https://i-blog.csdnimg.cn/blog_migrate/14ecf82af67e4bd395faa402615e6b1a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de9f02b94a3a517094f7f2bb737020c1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/08b0331106f25e2d537c8e5c353ecc81.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7396635963eab52acf1e21001f348c5e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/955c80d65e2b7cc1a58c1513fbe07bf4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/23494bc7667041bbd5e9a0ebbba78737.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2d1c30726ace70e017c2cf23e84a94d8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d8d281860159b53b059ad4c477803207.png)
![](https://i-blog.csdnimg.cn/blog_migrate/83ee924d0ff0b5ab162c5964f144ab4d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/47298896cec30b146ce9289a1085444b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/93517f04de3cf6185da98e6a248f6a1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c7352818292de4d475ca5b2d9547e409.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6b5a3979bb43da2b5314fb1ac795d54.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8727ab889f9cacf6b64453fc155b8f4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e0252aef7d1f93762535bccd59379f8e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0552dcb7030a25fb00cb1fd33770255e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/86a650d0c0e6edd3bb0eb18915c99074.png)
![](https://i-blog.csdnimg.cn/blog_migrate/23e52cdd4b704ba57fcbbfe76e73fa93.png)
![](https://i-blog.csdnimg.cn/blog_migrate/35b2fbc862352b73dbecaa44ce3fc5b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b2533645eadaca37ec7a1b9a146217c0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7e19f1cfc9c3a21c16593f348d18007f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6ae5aa589965439532bb43343f8973d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/72503900a218372bc0c5fe67ceda2904.png)
![](https://i-blog.csdnimg.cn/blog_migrate/47bba62e789fe8f80156425462cda5d9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fb0b76a9ef89ded7dc1487b6e677cca1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8895804b99183ee0f6ca8599154b01de.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ead8794c72d3751495a47273344ffaf1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5b5f401d09a694fd0af8ddf2da4d798a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e4b8af21465574aee93f745cb3877744.png)
![](https://i-blog.csdnimg.cn/blog_migrate/837963c7c2ff36755e8a62a3f7321deb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee5762773cbb207ff46c0d4b657a9706.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9487f4cd54be9b230db7d3911709774.png)
![](https://i-blog.csdnimg.cn/blog_migrate/347b46b5a2b281089bf3388e8313baf2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a32731a3547a01af3cd9ed4a2f97109c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e602c7f213c5c5d323be16f622a09cb6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5668b68de45b6e5ef1d38781b5f46b6e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/57d3bb81e9c80ffadc97510bcd037406.png)
![](https://i-blog.csdnimg.cn/blog_migrate/17971287e45e9a5e46cdecc6d9310c17.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2d33066c95f8746f123ccfc44479d8d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8f325780a44b7dcf11353de8a6a2110.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9d6e97bc9ec6dce38c444a7e6b14b63.png)
![](https://i-blog.csdnimg.cn/blog_migrate/633fe0af7e13c9adf6baafe423c3ea3e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5a5ff105608e3ce40e63f456dc8cd6e7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ce0b0d7ec3bc748a297d93584b5d61e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2463ac92dca4cea9dac74260ee50576a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b5a357ff8d9361708bc85c296067e824.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5edd50f7a3a8ddbb4b0a765d2b8dfb91.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e09a7f1aa6d477d2ece7d68199c6bcbf.png)