 Hello 算法 1.0.0b1 C++版. . . . . . . . . . . . . . . . 90 7. 树 91 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 30 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 2. 复杂度分析 hello‑algo.com 33 // === File: space_complexity.cpp === /* 指数阶(建立满二叉树) */ TreeNode* buildTree(int n) { if0 码力 | 187 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 C++版. . . . . . . . . . . . . . . . 90 7. 树 91 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 30 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 2. 复杂度分析 hello‑algo.com 33 // === File: space_complexity.cpp === /* 指数阶(建立满二叉树) */ TreeNode* buildTree(int n) { if0 码力 | 187 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 C++版. . . . . . . . . . . . . . . . 90 7. 树 91 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 30 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 2. 复杂度分析 hello‑algo.com 33 // === File: space_complexity.cpp === /* 指数阶(建立满二叉树) */ TreeNode* buildTree(int n) { if0 码力 | 197 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 C++版. . . . . . . . . . . . . . . . 90 7. 树 91 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 30 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 2. 复杂度分析 hello‑algo.com 33 // === File: space_complexity.cpp === /* 指数阶(建立满二叉树) */ TreeNode* buildTree(int n) { if0 码力 | 197 页 | 15.72 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.3. 二叉树数组表示 12.2. 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 12.3. 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 12.4. 汉诺塔问题 . . . . ) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段我们先专注于理解空间复杂度的 含义和推算方法。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.3. 二叉树数组表示 12.2. 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 12.3. 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 12.4. 汉诺塔问题 . . . . ) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段我们先专注于理解空间复杂度的 含义和推算方法。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑13 线性对数阶的时间复杂度0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑13 线性对数阶的时间复杂度0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.4 汉诺塔问题 . . . . linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 379 页 | 18.48 MB | 10 月前3
 C++高性能并行编程与优化 -  课件 - 17 由浅入深学习 map 容器7 1 待插入的数 4 5 8 7 set 查找为什么高效 • 刚刚的构建方法是平衡二叉树。而实际 set 中采用的是更为高效的红黑树。 • 区别就是每个节点上多挂了一个 bool 类型的 flag 变量,表示这个节点是红是黑。 • 总之这样三下五除二下来他的插入效率比平衡二叉树高出一个常数,但复杂度还是 O(logn) 。 • 红黑树的具体异同我会放到最后再细讲,一下子讲太深都睡着了,反正只有插入和删除的 ,红黑 flag 先忽略,就当他是普通的平衡二叉树好了。 • 注意看,这颗二叉树是有规律的。 • 首先看根节点 5 ,他的左子节点是 2 ,右子节点是 8 。 2 < 5 < 8 。 • 满足:左子节点 < 父节点 < 右子节点 2 set 查找为什么高效 1 4 5 8 7 2 set 查找为什么高效 • 注意看,这颗二叉树是有规律的。 • 再看看节点 2 ,他的左子节点是 ,他的左子节点是 1 ,右子节点是 4 。 1 < 2 < 4 。 • 满足:左子节点 < 父节点 < 右子节点 1 4 5 8 7 2 set 查找为什么高效 • 注意看,这颗二叉树是有规律的。 • 再看看节点 8 ,他的左子节点是 7 ,没有右子节点。 7 < 8 。 • 满足:左子节点 < 父节点 1 4 5 8 7 2 set 查找为什么高效 • 这就是二叉排序树的构建规则。0 码力 | 90 页 | 8.76 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 17 由浅入深学习 map 容器7 1 待插入的数 4 5 8 7 set 查找为什么高效 • 刚刚的构建方法是平衡二叉树。而实际 set 中采用的是更为高效的红黑树。 • 区别就是每个节点上多挂了一个 bool 类型的 flag 变量,表示这个节点是红是黑。 • 总之这样三下五除二下来他的插入效率比平衡二叉树高出一个常数,但复杂度还是 O(logn) 。 • 红黑树的具体异同我会放到最后再细讲,一下子讲太深都睡着了,反正只有插入和删除的 ,红黑 flag 先忽略,就当他是普通的平衡二叉树好了。 • 注意看,这颗二叉树是有规律的。 • 首先看根节点 5 ,他的左子节点是 2 ,右子节点是 8 。 2 < 5 < 8 。 • 满足:左子节点 < 父节点 < 右子节点 2 set 查找为什么高效 1 4 5 8 7 2 set 查找为什么高效 • 注意看,这颗二叉树是有规律的。 • 再看看节点 2 ,他的左子节点是 ,他的左子节点是 1 ,右子节点是 4 。 1 < 2 < 4 。 • 满足:左子节点 < 父节点 < 右子节点 1 4 5 8 7 2 set 查找为什么高效 • 注意看,这颗二叉树是有规律的。 • 再看看节点 8 ,他的左子节点是 7 ,没有右子节点。 7 < 8 。 • 满足:左子节点 < 父节点 1 4 5 8 7 2 set 查找为什么高效 • 这就是二叉排序树的构建规则。0 码力 | 90 页 | 8.76 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 C++ 版链式地址 鏈結位址 open addressing 开放寻址 開放定址 linear probing 线性探测 線性探查 lazy deletion 懒删除 懶刪除 binary tree 二叉树 二元樹 tree node 树节点 樹節點 left‑child node 左子节点 左子節點 right‑child node 右子节点 右子節點 parent node 父节点 父節點 height 高度 高度 depth 深度 深度 perfect binary tree 完美二叉树 完美二元樹 complete binary tree 完全二叉树 完全二元樹 full binary tree 完满二叉树 完滿二元樹 balanced binary tree 平衡二叉树 平衡二元樹 binary search tree 二叉搜索树 二元搜尋樹 AVL tree AVL0 码力 | 379 页 | 18.79 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 C++ 版链式地址 鏈結位址 open addressing 开放寻址 開放定址 linear probing 线性探测 線性探查 lazy deletion 懒删除 懶刪除 binary tree 二叉树 二元樹 tree node 树节点 樹節點 left‑child node 左子节点 左子節點 right‑child node 右子节点 右子節點 parent node 父节点 父節點 height 高度 高度 depth 深度 深度 perfect binary tree 完美二叉树 完美二元樹 complete binary tree 完全二叉树 完全二元樹 full binary tree 完满二叉树 完滿二元樹 balanced binary tree 平衡二叉树 平衡二元樹 binary search tree 二叉搜索树 二元搜尋樹 AVL tree AVL0 码力 | 379 页 | 18.79 MB | 10 月前3
共 9 条
- 1













