This commit is contained in:
krahets
2023-08-28 23:52:27 +08:00
parent 94b5cf3705
commit 6ae6c480e0
12 changed files with 84 additions and 82 deletions

View File

@ -3296,22 +3296,22 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1621" class="md-nav__link"> <a href="#1" class="md-nav__link">
16.2.1 &nbsp; 内容微调 1. &nbsp; 内容微调
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1622" class="md-nav__link"> <a href="#2" class="md-nav__link">
16.2.2 &nbsp; 内容创作 2. &nbsp; 内容创作
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1623-docker" class="md-nav__link"> <a href="#3-docker" class="md-nav__link">
16.2.3 &nbsp; Docker 部署 3. &nbsp; Docker 部署
</a> </a>
</li> </li>
@ -3412,22 +3412,22 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1621" class="md-nav__link"> <a href="#1" class="md-nav__link">
16.2.1 &nbsp; 内容微调 1. &nbsp; 内容微调
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1622" class="md-nav__link"> <a href="#2" class="md-nav__link">
16.2.2 &nbsp; 内容创作 2. &nbsp; 内容创作
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1623-docker" class="md-nav__link"> <a href="#3-docker" class="md-nav__link">
16.2.3 &nbsp; Docker 部署 3. &nbsp; Docker 部署
</a> </a>
</li> </li>
@ -3463,7 +3463,7 @@
<p>纸质书籍的两次印刷的间隔时间往往需要数年,内容更新非常不方便。</p> <p>纸质书籍的两次印刷的间隔时间往往需要数年,内容更新非常不方便。</p>
<p>然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。</p> <p>然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。</p>
</div> </div>
<h2 id="1621">16.2.1 &nbsp; 内容微调<a class="headerlink" href="#1621" title="Permanent link">&para;</a></h2> <h3 id="1">1. &nbsp; 内容微调<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<p>如图 16-1 所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。</p> <p>如图 16-1 所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。</p>
<ol> <ol>
<li>点击“编辑图标”,如果遇到“需要 Fork 此仓库”的提示,请同意该操作。</li> <li>点击“编辑图标”,如果遇到“需要 Fork 此仓库”的提示,请同意该操作。</li>
@ -3474,7 +3474,7 @@
<p align="center"> 图 16-1 &nbsp; 页面编辑按键 </p> <p align="center"> 图 16-1 &nbsp; 页面编辑按键 </p>
<p>图片无法直接修改,需要通过新建 <a href="https://github.com/krahets/hello-algo/issues">Issue</a> 或评论留言来描述问题,我们会尽快重新绘制并替换图片。</p> <p>图片无法直接修改,需要通过新建 <a href="https://github.com/krahets/hello-algo/issues">Issue</a> 或评论留言来描述问题,我们会尽快重新绘制并替换图片。</p>
<h2 id="1622">16.2.2 &nbsp; 内容创作<a class="headerlink" href="#1622" title="Permanent link">&para;</a></h2> <h3 id="2">2. &nbsp; 内容创作<a class="headerlink" href="#2" title="Permanent link">&para;</a></h3>
<p>如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。</p> <p>如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。</p>
<ol> <ol>
<li>登录 GitHub ,将<a href="https://github.com/krahets/hello-algo">本仓库</a> Fork 到个人账号下。</li> <li>登录 GitHub ,将<a href="https://github.com/krahets/hello-algo">本仓库</a> Fork 到个人账号下。</li>
@ -3483,7 +3483,7 @@
<li>将本地所做更改 Commit ,然后 Push 至远程仓库。</li> <li>将本地所做更改 Commit ,然后 Push 至远程仓库。</li>
<li>刷新仓库网页点击“Create pull request”按钮即可发起拉取请求。</li> <li>刷新仓库网页点击“Create pull request”按钮即可发起拉取请求。</li>
</ol> </ol>
<h2 id="1623-docker">16.2.3 &nbsp; Docker 部署<a class="headerlink" href="#1623-docker" title="Permanent link">&para;</a></h2> <h3 id="3-docker">3. &nbsp; Docker 部署<a class="headerlink" href="#3-docker" title="Permanent link">&para;</a></h3>
<p>执行以下 Docker 脚本,稍等片刻,即可在网页 <code>http://localhost:8000</code> 访问本项目。</p> <p>执行以下 Docker 脚本,稍等片刻,即可在网页 <code>http://localhost:8000</code> 访问本项目。</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nb">cd</span><span class="w"> </span>hello-algo <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nb">cd</span><span class="w"> </span>hello-algo

View File

@ -3276,71 +3276,71 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1611-vscode" class="md-nav__link"> <a href="#1-vscode" class="md-nav__link">
16.1.1 &nbsp; VSCode 1. &nbsp; VSCode
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1612-java" class="md-nav__link"> <a href="#2-java" class="md-nav__link">
16.1.2 &nbsp; Java 环境 2. &nbsp; Java 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1613-cc" class="md-nav__link"> <a href="#3-cc" class="md-nav__link">
16.1.3 &nbsp; C/C++ 环境 3. &nbsp; C/C++ 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1614-python" class="md-nav__link"> <a href="#4-python" class="md-nav__link">
16.1.4 &nbsp; Python 环境 4. &nbsp; Python 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1615-go" class="md-nav__link"> <a href="#5-go" class="md-nav__link">
16.1.5 &nbsp; Go 环境 5. &nbsp; Go 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1616-javascript" class="md-nav__link"> <a href="#6-javascript" class="md-nav__link">
16.1.6 &nbsp; JavaScript 环境 6. &nbsp; JavaScript 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1617-c" class="md-nav__link"> <a href="#7-c" class="md-nav__link">
16.1.7 &nbsp; C# 环境 7. &nbsp; C# 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1618-swift" class="md-nav__link"> <a href="#8-swift" class="md-nav__link">
16.1.8 &nbsp; Swift 环境 8. &nbsp; Swift 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1619-dart" class="md-nav__link"> <a href="#9-dart" class="md-nav__link">
16.1.9 &nbsp; Dart 环境 9. &nbsp; Dart 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#16110-rust" class="md-nav__link"> <a href="#10-rust" class="md-nav__link">
16.1.10 &nbsp; Rust 环境 10. &nbsp; Rust 环境
</a> </a>
</li> </li>
@ -3461,71 +3461,71 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1611-vscode" class="md-nav__link"> <a href="#1-vscode" class="md-nav__link">
16.1.1 &nbsp; VSCode 1. &nbsp; VSCode
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1612-java" class="md-nav__link"> <a href="#2-java" class="md-nav__link">
16.1.2 &nbsp; Java 环境 2. &nbsp; Java 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1613-cc" class="md-nav__link"> <a href="#3-cc" class="md-nav__link">
16.1.3 &nbsp; C/C++ 环境 3. &nbsp; C/C++ 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1614-python" class="md-nav__link"> <a href="#4-python" class="md-nav__link">
16.1.4 &nbsp; Python 环境 4. &nbsp; Python 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1615-go" class="md-nav__link"> <a href="#5-go" class="md-nav__link">
16.1.5 &nbsp; Go 环境 5. &nbsp; Go 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1616-javascript" class="md-nav__link"> <a href="#6-javascript" class="md-nav__link">
16.1.6 &nbsp; JavaScript 环境 6. &nbsp; JavaScript 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1617-c" class="md-nav__link"> <a href="#7-c" class="md-nav__link">
16.1.7 &nbsp; C# 环境 7. &nbsp; C# 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1618-swift" class="md-nav__link"> <a href="#8-swift" class="md-nav__link">
16.1.8 &nbsp; Swift 环境 8. &nbsp; Swift 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#1619-dart" class="md-nav__link"> <a href="#9-dart" class="md-nav__link">
16.1.9 &nbsp; Dart 环境 9. &nbsp; Dart 环境
</a> </a>
</li> </li>
<li class="md-nav__item"> <li class="md-nav__item">
<a href="#16110-rust" class="md-nav__link"> <a href="#10-rust" class="md-nav__link">
16.1.10 &nbsp; Rust 环境 10. &nbsp; Rust 环境
</a> </a>
</li> </li>
@ -3554,54 +3554,54 @@
<h1 id="161">16.1 &nbsp; 编程环境安装<a class="headerlink" href="#161" title="Permanent link">&para;</a></h1> <h1 id="161">16.1 &nbsp; 编程环境安装<a class="headerlink" href="#161" title="Permanent link">&para;</a></h1>
<h2 id="1611-vscode">16.1.1 &nbsp; VSCode<a class="headerlink" href="#1611-vscode" title="Permanent link">&para;</a></h2> <h3 id="1-vscode">1. &nbsp; VSCode<a class="headerlink" href="#1-vscode" title="Permanent link">&para;</a></h3>
<p>本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 <a href="https://code.visualstudio.com/">VSCode</a></p> <p>本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 <a href="https://code.visualstudio.com/">VSCode</a></p>
<h2 id="1612-java">16.1.2 &nbsp; Java 环境<a class="headerlink" href="#1612-java" title="Permanent link">&para;</a></h2> <h3 id="2-java">2. &nbsp; Java 环境<a class="headerlink" href="#2-java" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://jdk.java.net/18/">OpenJDK</a>(版本需满足 &gt; JDK 9</li> <li>下载并安装 <a href="https://jdk.java.net/18/">OpenJDK</a>(版本需满足 &gt; JDK 9</li>
<li>在 VSCode 的插件市场中搜索 <code>java</code> ,安装 Extension Pack for Java 。</li> <li>在 VSCode 的插件市场中搜索 <code>java</code> ,安装 Extension Pack for Java 。</li>
</ol> </ol>
<h2 id="1613-cc">16.1.3 &nbsp; C/C++ 环境<a class="headerlink" href="#1613-cc" title="Permanent link">&para;</a></h2> <h3 id="3-cc">3. &nbsp; C/C++ 环境<a class="headerlink" href="#3-cc" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>Windows 系统需要安装 <a href="https://sourceforge.net/projects/mingw-w64/files/">MinGW</a><a href="https://blog.csdn.net/qq_33698226/article/details/129031241">配置教程</a>MacOS 自带 Clang 无须安装。</li> <li>Windows 系统需要安装 <a href="https://sourceforge.net/projects/mingw-w64/files/">MinGW</a><a href="https://blog.csdn.net/qq_33698226/article/details/129031241">配置教程</a>MacOS 自带 Clang 无须安装。</li>
<li>在 VSCode 的插件市场中搜索 <code>c++</code> ,安装 C/C++ Extension Pack 。</li> <li>在 VSCode 的插件市场中搜索 <code>c++</code> ,安装 C/C++ Extension Pack 。</li>
<li>(可选)打开 Settings 页面,搜索 <code>Clang_format_fallback Style</code> 代码格式化选项,设置为 <code>{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }</code></li> <li>(可选)打开 Settings 页面,搜索 <code>Clang_format_fallback Style</code> 代码格式化选项,设置为 <code>{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }</code></li>
</ol> </ol>
<h2 id="1614-python">16.1.4 &nbsp; Python 环境<a class="headerlink" href="#1614-python" title="Permanent link">&para;</a></h2> <h3 id="4-python">4. &nbsp; Python 环境<a class="headerlink" href="#4-python" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://docs.conda.io/en/latest/miniconda.html">Miniconda3</a></li> <li>下载并安装 <a href="https://docs.conda.io/en/latest/miniconda.html">Miniconda3</a></li>
<li>在 VSCode 的插件市场中搜索 <code>python</code> ,安装 Python Extension Pack 。</li> <li>在 VSCode 的插件市场中搜索 <code>python</code> ,安装 Python Extension Pack 。</li>
<li>(可选)在命令行输入 <code>pip install black</code> ,安装代码格式化工具。</li> <li>(可选)在命令行输入 <code>pip install black</code> ,安装代码格式化工具。</li>
</ol> </ol>
<h2 id="1615-go">16.1.5 &nbsp; Go 环境<a class="headerlink" href="#1615-go" title="Permanent link">&para;</a></h2> <h3 id="5-go">5. &nbsp; Go 环境<a class="headerlink" href="#5-go" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://go.dev/dl/">go</a></li> <li>下载并安装 <a href="https://go.dev/dl/">go</a></li>
<li>在 VSCode 的插件市场中搜索 <code>go</code> ,安装 Go 。</li> <li>在 VSCode 的插件市场中搜索 <code>go</code> ,安装 Go 。</li>
<li>快捷键 <code>Ctrl + Shift + P</code> 呼出命令栏,输入 go ,选择 <code>Go: Install/Update Tools</code> ,全部勾选并安装即可。</li> <li>快捷键 <code>Ctrl + Shift + P</code> 呼出命令栏,输入 go ,选择 <code>Go: Install/Update Tools</code> ,全部勾选并安装即可。</li>
</ol> </ol>
<h2 id="1616-javascript">16.1.6 &nbsp; JavaScript 环境<a class="headerlink" href="#1616-javascript" title="Permanent link">&para;</a></h2> <h3 id="6-javascript">6. &nbsp; JavaScript 环境<a class="headerlink" href="#6-javascript" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://nodejs.org/en/">node.js</a></li> <li>下载并安装 <a href="https://nodejs.org/en/">node.js</a></li>
<li>在 VSCode 的插件市场中搜索 <code>javascript</code> ,安装 JavaScript (ES6) code snippets 。</li> <li>在 VSCode 的插件市场中搜索 <code>javascript</code> ,安装 JavaScript (ES6) code snippets 。</li>
<li>(可选)在 VSCode 的插件市场中搜索 <code>Prettier</code> ,安装代码格式化工具。</li> <li>(可选)在 VSCode 的插件市场中搜索 <code>Prettier</code> ,安装代码格式化工具。</li>
</ol> </ol>
<h2 id="1617-c">16.1.7 &nbsp; C# 环境<a class="headerlink" href="#1617-c" title="Permanent link">&para;</a></h2> <h3 id="7-c">7. &nbsp; C# 环境<a class="headerlink" href="#7-c" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://dotnet.microsoft.com/en-us/download">.Net 6.0</a></li> <li>下载并安装 <a href="https://dotnet.microsoft.com/en-us/download">.Net 6.0</a></li>
<li>在 VSCode 的插件市场中搜索 <code>C# Dev Kit</code> ,安装 C# Dev Kit <a href="https://code.visualstudio.com/docs/csharp/get-started">配置教程</a>)。</li> <li>在 VSCode 的插件市场中搜索 <code>C# Dev Kit</code> ,安装 C# Dev Kit <a href="https://code.visualstudio.com/docs/csharp/get-started">配置教程</a>)。</li>
<li>也可使用 Visual Studio<a href="https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022">安装教程</a>)。</li> <li>也可使用 Visual Studio<a href="https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022">安装教程</a>)。</li>
</ol> </ol>
<h2 id="1618-swift">16.1.8 &nbsp; Swift 环境<a class="headerlink" href="#1618-swift" title="Permanent link">&para;</a></h2> <h3 id="8-swift">8. &nbsp; Swift 环境<a class="headerlink" href="#8-swift" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://www.swift.org/download/">Swift</a></li> <li>下载并安装 <a href="https://www.swift.org/download/">Swift</a></li>
<li>在 VSCode 的插件市场中搜索 <code>swift</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang">Swift for Visual Studio Code</a></li> <li>在 VSCode 的插件市场中搜索 <code>swift</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang">Swift for Visual Studio Code</a></li>
</ol> </ol>
<h2 id="1619-dart">16.1.9 &nbsp; Dart 环境<a class="headerlink" href="#1619-dart" title="Permanent link">&para;</a></h2> <h3 id="9-dart">9. &nbsp; Dart 环境<a class="headerlink" href="#9-dart" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://dart.dev/get-dart">Dart</a></li> <li>下载并安装 <a href="https://dart.dev/get-dart">Dart</a></li>
<li>在 VSCode 的插件市场中搜索 <code>dart</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code">Dart</a></li> <li>在 VSCode 的插件市场中搜索 <code>dart</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code">Dart</a></li>
</ol> </ol>
<h2 id="16110-rust">16.1.10 &nbsp; Rust 环境<a class="headerlink" href="#16110-rust" title="Permanent link">&para;</a></h2> <h3 id="10-rust">10. &nbsp; Rust 环境<a class="headerlink" href="#10-rust" title="Permanent link">&para;</a></h3>
<ol> <ol>
<li>下载并安装 <a href="https://www.rust-lang.org/tools/install">Rust</a></li> <li>下载并安装 <a href="https://www.rust-lang.org/tools/install">Rust</a></li>
<li>在 VSCode 的插件市场中搜索 <code>rust</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer">rust-analyzer</a></li> <li>在 VSCode 的插件市场中搜索 <code>rust</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer">rust-analyzer</a></li>

View File

@ -5040,6 +5040,8 @@
<p>相比基于前序遍历的代码实现,基于回溯算法框架的代码实现虽然显得啰嗦,但通用性更好。实际上,<strong>许多回溯问题都可以在该框架下解决</strong>。我们只需根据具体问题来定义 <code>state</code><code>choices</code> ,并实现框架中的各个方法即可。</p> <p>相比基于前序遍历的代码实现,基于回溯算法框架的代码实现虽然显得啰嗦,但通用性更好。实际上,<strong>许多回溯问题都可以在该框架下解决</strong>。我们只需根据具体问题来定义 <code>state</code><code>choices</code> ,并实现框架中的各个方法即可。</p>
<h2 id="1314">13.1.4 &nbsp; 常用术语<a class="headerlink" href="#1314" title="Permanent link">&para;</a></h2> <h2 id="1314">13.1.4 &nbsp; 常用术语<a class="headerlink" href="#1314" title="Permanent link">&para;</a></h2>
<p>为了更清晰地分析算法问题,我们总结一下回溯算法中常用术语的含义,并对照例题三给出对应示例。</p> <p>为了更清晰地分析算法问题,我们总结一下回溯算法中常用术语的含义,并对照例题三给出对应示例。</p>
<p align="center"> 表 13-1 &nbsp; 常见的回溯算法术语 </p>
<div class="center-table"> <div class="center-table">
<table> <table>
<thead> <thead>

View File

@ -3537,8 +3537,8 @@
<h1 id="132">13.2 &nbsp; 全排列问题<a class="headerlink" href="#132" title="Permanent link">&para;</a></h1> <h1 id="132">13.2 &nbsp; 全排列问题<a class="headerlink" href="#132" title="Permanent link">&para;</a></h1>
<p>全排列问题是回溯算法的一个典型应用。它的定义是在给定一个集合(如一个数组或字符串)的情况下,找出这个集合中元素的所有可能的排列。</p> <p>全排列问题是回溯算法的一个典型应用。它的定义是在给定一个集合(如一个数组或字符串)的情况下,找出这个集合中元素的所有可能的排列。</p>
<p>表 13-1 列举了几个示例数据,包括输入数组和对应的所有排列。</p> <p>表 13-2 列举了几个示例数据,包括输入数组和对应的所有排列。</p>
<p align="center"> 表 13-1 &nbsp; 数组与链表的效率对比 </p> <p align="center"> 表 13-2 &nbsp; 数组与链表的效率对比 </p>
<div class="center-table"> <div class="center-table">
<table> <table>

View File

@ -4191,7 +4191,7 @@ T(n) = 3 + 2n
<ol> <ol>
<li><strong>忽略 <span class="arithmatex">\(T(n)\)</span> 中的常数项</strong>。因为它们都与 <span class="arithmatex">\(n\)</span> 无关,所以对时间复杂度不产生影响。</li> <li><strong>忽略 <span class="arithmatex">\(T(n)\)</span> 中的常数项</strong>。因为它们都与 <span class="arithmatex">\(n\)</span> 无关,所以对时间复杂度不产生影响。</li>
<li><strong>省略所有系数</strong>。例如,循环 <span class="arithmatex">\(2n\)</span> 次、<span class="arithmatex">\(5n + 1\)</span> 次等,都可以简化记为 <span class="arithmatex">\(n\)</span> 次,因为 <span class="arithmatex">\(n\)</span> 前面的系数对时间复杂度没有影响。</li> <li><strong>省略所有系数</strong>。例如,循环 <span class="arithmatex">\(2n\)</span> 次、<span class="arithmatex">\(5n + 1\)</span> 次等,都可以简化记为 <span class="arithmatex">\(n\)</span> 次,因为 <span class="arithmatex">\(n\)</span> 前面的系数对时间复杂度没有影响。</li>
<li><strong>循环嵌套时使用乘法</strong>。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 <code>1.</code> 点和第 <code>2.</code> 点的技巧。</li> <li><strong>循环嵌套时使用乘法</strong>。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 <code>1.</code> 点和第 <code>2.</code> 点的技巧。</li>
</ol> </ol>
<p>给定一个函数,我们可以用上述技巧来统计操作数量。</p> <p>给定一个函数,我们可以用上述技巧来统计操作数量。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="4:12"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><input id="__tabbed_4_12" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Java</label><label for="__tabbed_4_2">C++</label><label for="__tabbed_4_3">Python</label><label for="__tabbed_4_4">Go</label><label for="__tabbed_4_5">JS</label><label for="__tabbed_4_6">TS</label><label for="__tabbed_4_7">C</label><label for="__tabbed_4_8">C#</label><label for="__tabbed_4_9">Swift</label><label for="__tabbed_4_10">Zig</label><label for="__tabbed_4_11">Dart</label><label for="__tabbed_4_12">Rust</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="4:12"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><input id="__tabbed_4_12" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Java</label><label for="__tabbed_4_2">C++</label><label for="__tabbed_4_3">Python</label><label for="__tabbed_4_4">Go</label><label for="__tabbed_4_5">JS</label><label for="__tabbed_4_6">TS</label><label for="__tabbed_4_7">C</label><label for="__tabbed_4_8">C#</label><label for="__tabbed_4_9">Swift</label><label for="__tabbed_4_10">Zig</label><label for="__tabbed_4_11">Dart</label><label for="__tabbed_4_12">Rust</label></div>

View File

@ -3454,7 +3454,7 @@
<li><strong>反码</strong>:正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反。</li> <li><strong>反码</strong>:正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反。</li>
<li><strong>补码</strong>:正数的补码与其原码相同,负数的补码是在其反码的基础上加 <span class="arithmatex">\(1\)</span></li> <li><strong>补码</strong>:正数的补码与其原码相同,负数的补码是在其反码的基础上加 <span class="arithmatex">\(1\)</span></li>
</ul> </ul>
<p>图 3-4 展示了原、反码和补码之间的转换方法。</p> <p>图 3-4 展示了原、反码和补码之间的转换方法。</p>
<p><img alt="原码、反码与补码之间的相互转换" src="../number_encoding.assets/1s_2s_complement.png" /></p> <p><img alt="原码、反码与补码之间的相互转换" src="../number_encoding.assets/1s_2s_complement.png" /></p>
<p align="center"> 图 3-4 &nbsp; 原码、反码与补码之间的相互转换 </p> <p align="center"> 图 3-4 &nbsp; 原码、反码与补码之间的相互转换 </p>

View File

@ -3478,7 +3478,7 @@
<h1 id="151">15.1 &nbsp; 贪心算法<a class="headerlink" href="#151" title="Permanent link">&para;</a></h1> <h1 id="151">15.1 &nbsp; 贪心算法<a class="headerlink" href="#151" title="Permanent link">&para;</a></h1>
<p>贪心算法是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。</p> <p>贪心算法 greedy algorithm」是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。</p>
<p>贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。</p> <p>贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。</p>
<ul> <ul>
<li>动态规划会根据之前阶段的所有决策来考虑当前决策,并使用过去子问题的解来构建当前子问题的解。</li> <li>动态规划会根据之前阶段的所有决策来考虑当前决策,并使用过去子问题的解来构建当前子问题的解。</li>

View File

@ -3465,7 +3465,7 @@
<div class="tabbed-set tabbed-alternate" data-tabs="1:7"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">&lt;1&gt;</label><label for="__tabbed_1_2">&lt;2&gt;</label><label for="__tabbed_1_3">&lt;3&gt;</label><label for="__tabbed_1_4">&lt;4&gt;</label><label for="__tabbed_1_5">&lt;5&gt;</label><label for="__tabbed_1_6">&lt;6&gt;</label><label for="__tabbed_1_7">&lt;7&gt;</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="1:7"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">&lt;1&gt;</label><label for="__tabbed_1_2">&lt;2&gt;</label><label for="__tabbed_1_3">&lt;3&gt;</label><label for="__tabbed_1_4">&lt;4&gt;</label><label for="__tabbed_1_5">&lt;5&gt;</label><label for="__tabbed_1_6">&lt;6&gt;</label><label for="__tabbed_1_7">&lt;7&gt;</label></div>
<div class="tabbed-content"> <div class="tabbed-content">
<div class="tabbed-block"> <div class="tabbed-block">
<p><img alt="binary_search_step1" src="../binary_search.assets/binary_search_step1.png" /></p> <p><img alt="二分查找流程" src="../binary_search.assets/binary_search_step1.png" /></p>
</div> </div>
<div class="tabbed-block"> <div class="tabbed-block">
<p><img alt="binary_search_step2" src="../binary_search.assets/binary_search_step2.png" /></p> <p><img alt="binary_search_step2" src="../binary_search.assets/binary_search_step2.png" /></p>
@ -3487,7 +3487,7 @@
</div> </div>
</div> </div>
</div> </div>
<p align="center"> 图 10-2 &nbsp; binary_search_step1 </p> <p align="center"> 图 10-2 &nbsp; 二分查找流程 </p>
<p>值得注意的是,由于 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(j\)</span> 都是 <code>int</code> 类型,<strong>因此 <span class="arithmatex">\(i + j\)</span> 可能会超出 <code>int</code> 类型的取值范围</strong>。为了避免大数越界,我们通常采用公式 <span class="arithmatex">\(m = \lfloor {i + (j - i) / 2} \rfloor\)</span> 来计算中点。</p> <p>值得注意的是,由于 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(j\)</span> 都是 <code>int</code> 类型,<strong>因此 <span class="arithmatex">\(i + j\)</span> 可能会超出 <code>int</code> 类型的取值范围</strong>。为了避免大数越界,我们通常采用公式 <span class="arithmatex">\(m = \lfloor {i + (j - i) / 2} \rfloor\)</span> 来计算中点。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="2:12"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JS</label><label for="__tabbed_2_6">TS</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label><label for="__tabbed_2_11">Dart</label><label for="__tabbed_2_12">Rust</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="2:12"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JS</label><label for="__tabbed_2_6">TS</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label><label for="__tabbed_2_11">Dart</label><label for="__tabbed_2_12">Rust</label></div>
@ -3751,8 +3751,8 @@
</div> </div>
</div> </div>
</div> </div>
<p>时间复杂度 <span class="arithmatex">\(O(\log n)\)</span> 。每轮缩小一半区间,因此二分循环次数为 <span class="arithmatex">\(\log_2 n\)</span></p> <p><strong>时间复杂度 <span class="arithmatex">\(O(\log n)\)</span></strong> :在二分循环中,区间每轮缩小一半,循环次数为 <span class="arithmatex">\(\log_2 n\)</span></p>
<p>空间复杂度 <span class="arithmatex">\(O(1)\)</span>指针 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(j\)</span> 使用常数大小空间。</p> <p><strong>空间复杂度 <span class="arithmatex">\(O(1)\)</span></strong> 指针 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(j\)</span> 使用常数大小空间。</p>
<h2 id="1011">10.1.1 &nbsp; 区间表示方法<a class="headerlink" href="#1011" title="Permanent link">&para;</a></h2> <h2 id="1011">10.1.1 &nbsp; 区间表示方法<a class="headerlink" href="#1011" title="Permanent link">&para;</a></h2>
<p>除了上述的双闭区间外,常见的区间表示还有“左闭右开”区间,定义为 <span class="arithmatex">\([0, n)\)</span> ,即左边界包含自身,右边界不包含自身。在该表示下,区间 <span class="arithmatex">\([i, j]\)</span><span class="arithmatex">\(i = j\)</span> 时为空。</p> <p>除了上述的双闭区间外,常见的区间表示还有“左闭右开”区间,定义为 <span class="arithmatex">\([0, n)\)</span> ,即左边界包含自身,右边界不包含自身。在该表示下,区间 <span class="arithmatex">\([i, j]\)</span><span class="arithmatex">\(i = j\)</span> 时为空。</p>
<p>我们可以基于该表示实现具有相同功能的二分查找算法。</p> <p>我们可以基于该表示实现具有相同功能的二分查找算法。</p>

View File

@ -3659,7 +3659,7 @@
<h2 id="751-avl">7.5.1 &nbsp; AVL 树常见术语<a class="headerlink" href="#751-avl" title="Permanent link">&para;</a></h2> <h2 id="751-avl">7.5.1 &nbsp; AVL 树常见术语<a class="headerlink" href="#751-avl" title="Permanent link">&para;</a></h2>
<p>AVL 树既是二叉搜索树也是平衡二叉树,同时满足这两类二叉树的所有性质,因此也被称为「平衡二叉搜索树 balanced binary search tree」。</p> <p>AVL 树既是二叉搜索树也是平衡二叉树,同时满足这两类二叉树的所有性质,因此也被称为「平衡二叉搜索树 balanced binary search tree」。</p>
<h3 id="1">1. &nbsp; 节点高度<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3> <h3 id="1">1. &nbsp; 节点高度<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<p>在操作 AVL 树时,我们需要获取节点高度,因此需要为 AVL 树的节点类添加 <code>height</code> 变量。</p> <p>由于 AVL 树的相关操作需要获取节点高度,因此我们需要为节点类添加 <code>height</code> 变量。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:12"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JS</label><label for="__tabbed_1_6">TS</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label><label for="__tabbed_1_12">Rust</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="1:12"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JS</label><label for="__tabbed_1_6">TS</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label><label for="__tabbed_1_12">Rust</label></div>
<div class="tabbed-content"> <div class="tabbed-content">
<div class="tabbed-block"> <div class="tabbed-block">

View File

@ -4212,12 +4212,12 @@
<li>根据待删除节点的子节点数量(三种情况),执行对应的删除节点操作。</li> <li>根据待删除节点的子节点数量(三种情况),执行对应的删除节点操作。</li>
</ol> </ol>
<p>如图 7-19 所示,当待删除节点的度为 <span class="arithmatex">\(0\)</span> 时,表示该节点是叶节点,可以直接删除。</p> <p>如图 7-19 所示,当待删除节点的度为 <span class="arithmatex">\(0\)</span> 时,表示该节点是叶节点,可以直接删除。</p>
<p><img alt="在二叉搜索树中删除节点(度为 0" src="../binary_search_tree.assets/bst_remove_case1.png" /></p> <p><img alt="在二叉搜索树中删除节点(度为 0 " src="../binary_search_tree.assets/bst_remove_case1.png" /></p>
<p align="center"> 图 7-19 &nbsp; 在二叉搜索树中删除节点(度为 0 </p> <p align="center"> 图 7-19 &nbsp; 在二叉搜索树中删除节点(度为 0 </p>
<p>如图 7-20 所示,当待删除节点的度为 <span class="arithmatex">\(1\)</span> 时,将待删除节点替换为其子节点即可。</p> <p>如图 7-20 所示,当待删除节点的度为 <span class="arithmatex">\(1\)</span> 时,将待删除节点替换为其子节点即可。</p>
<p><img alt="在二叉搜索树中删除节点(度为 1" src="../binary_search_tree.assets/bst_remove_case2.png" /></p> <p><img alt="在二叉搜索树中删除节点(度为 1 " src="../binary_search_tree.assets/bst_remove_case2.png" /></p>
<p align="center"> 图 7-20 &nbsp; 在二叉搜索树中删除节点(度为 1 </p> <p align="center"> 图 7-20 &nbsp; 在二叉搜索树中删除节点(度为 1 </p>
<p>当待删除节点的度为 <span class="arithmatex">\(2\)</span> 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 <span class="arithmatex">\(&lt;\)</span><span class="arithmatex">\(&lt;\)</span> 右”的性质,<strong>因此这个节点可以是右子树的最小节点或左子树的最大节点</strong></p> <p>当待删除节点的度为 <span class="arithmatex">\(2\)</span> 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 <span class="arithmatex">\(&lt;\)</span><span class="arithmatex">\(&lt;\)</span> 右”的性质,<strong>因此这个节点可以是右子树的最小节点或左子树的最大节点</strong></p>
<p>假设我们选择右子树的最小节点(即中序遍历的下一个节点),则删除操作流程如图 7-21 所示。</p> <p>假设我们选择右子树的最小节点(即中序遍历的下一个节点),则删除操作流程如图 7-21 所示。</p>
@ -4228,7 +4228,7 @@
<div class="tabbed-set tabbed-alternate" data-tabs="4:4"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">&lt;1&gt;</label><label for="__tabbed_4_2">&lt;2&gt;</label><label for="__tabbed_4_3">&lt;3&gt;</label><label for="__tabbed_4_4">&lt;4&gt;</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="4:4"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">&lt;1&gt;</label><label for="__tabbed_4_2">&lt;2&gt;</label><label for="__tabbed_4_3">&lt;3&gt;</label><label for="__tabbed_4_4">&lt;4&gt;</label></div>
<div class="tabbed-content"> <div class="tabbed-content">
<div class="tabbed-block"> <div class="tabbed-block">
<p><img alt="二叉搜索树删除节点示例" src="../binary_search_tree.assets/bst_remove_case3_step1.png" /></p> <p><img alt="二叉搜索树删除节点(度为 2 " src="../binary_search_tree.assets/bst_remove_case3_step1.png" /></p>
</div> </div>
<div class="tabbed-block"> <div class="tabbed-block">
<p><img alt="bst_remove_case3_step2" src="../binary_search_tree.assets/bst_remove_case3_step2.png" /></p> <p><img alt="bst_remove_case3_step2" src="../binary_search_tree.assets/bst_remove_case3_step2.png" /></p>
@ -4241,7 +4241,7 @@
</div> </div>
</div> </div>
</div> </div>
<p align="center"> 图 7-21 &nbsp; 二叉搜索树删除节点示例 </p> <p align="center"> 图 7-21 &nbsp; 二叉搜索树删除节点(度为 2 </p>
<p>删除节点操作同样使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,其中查找待删除节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间,获取中序遍历后继节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间。</p> <p>删除节点操作同样使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,其中查找待删除节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间,获取中序遍历后继节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间。</p>
<div class="tabbed-set tabbed-alternate" data-tabs="5:11"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><input id="__tabbed_5_4" name="__tabbed_5" type="radio" /><input id="__tabbed_5_5" name="__tabbed_5" type="radio" /><input id="__tabbed_5_6" name="__tabbed_5" type="radio" /><input id="__tabbed_5_7" name="__tabbed_5" type="radio" /><input id="__tabbed_5_8" name="__tabbed_5" type="radio" /><input id="__tabbed_5_9" name="__tabbed_5" type="radio" /><input id="__tabbed_5_10" name="__tabbed_5" type="radio" /><input id="__tabbed_5_11" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Java</label><label for="__tabbed_5_2">C++</label><label for="__tabbed_5_3">Python</label><label for="__tabbed_5_4">Go</label><label for="__tabbed_5_5">JS</label><label for="__tabbed_5_6">TS</label><label for="__tabbed_5_7">C</label><label for="__tabbed_5_8">C#</label><label for="__tabbed_5_9">Swift</label><label for="__tabbed_5_10">Zig</label><label for="__tabbed_5_11">Dart</label></div> <div class="tabbed-set tabbed-alternate" data-tabs="5:11"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><input id="__tabbed_5_4" name="__tabbed_5" type="radio" /><input id="__tabbed_5_5" name="__tabbed_5" type="radio" /><input id="__tabbed_5_6" name="__tabbed_5" type="radio" /><input id="__tabbed_5_7" name="__tabbed_5" type="radio" /><input id="__tabbed_5_8" name="__tabbed_5" type="radio" /><input id="__tabbed_5_9" name="__tabbed_5" type="radio" /><input id="__tabbed_5_10" name="__tabbed_5" type="radio" /><input id="__tabbed_5_11" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Java</label><label for="__tabbed_5_2">C++</label><label for="__tabbed_5_3">Python</label><label for="__tabbed_5_4">Go</label><label for="__tabbed_5_5">JS</label><label for="__tabbed_5_6">TS</label><label for="__tabbed_5_7">C</label><label for="__tabbed_5_8">C#</label><label for="__tabbed_5_9">Swift</label><label for="__tabbed_5_10">Zig</label><label for="__tabbed_5_11">Dart</label></div>

File diff suppressed because one or more lines are too long

Binary file not shown.