Hello 算法 1.0.0b1 Golang版. . . . . . . . . . . . . . . . 88 7. 树 89 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . ) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 } Figure 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 // === File: space_complexity.go === /* 指数阶(建立满二叉树) */ func buildTree(n int) *treeNode { if n == 0 {0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版. . . . . . . . . . . . . . . . 91 7. 树 92 7.1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . ) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 Figure 2‑10. 空间复杂度的常见类型 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段先聚焦在理解空间复杂度含义和推 算方法上。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 } Figure 2‑12. 递归函数产生的平方阶空间复杂度 指数阶 ?(2?) 指数阶常见于二叉树。高度为 ? 的「满二叉树」的结点数量为 2? − 1 ,使用 ?(2?) 空间。 // === File: space_complexity.go === /* 指数阶(建立满二叉树) */ func buildTree(n int) *treeNode { if n == 0 {0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.1.0 Go版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . + linearLogRecur(n/2) for i := 0; i < n; i++ { count++ } return count } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 12.4 汉诺塔问题 . . . . linearLogRecur(n/2) for i := 0.0; i < n; i++ { count++ } return count } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版1. 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 7.2. 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 7.3. 二叉树数组表示 12.2. 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 12.3. 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 12.4. 汉诺塔问题 . . . . 对数阶 < 线性阶 < 平方阶 < 指数阶 2. 复杂度 hello‑algo.com 31 Figure 2‑10. 空间复杂度的常见类型 � 部分示例代码需要一些前置知识,包括数组、链表、二叉树、递归算法等。如果遇到看不懂的 地方无需担心,可以在学习完后面章节后再来复习,现阶段我们先专注于理解空间复杂度的 含义和推算方法。 常数阶 ?(1) 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 12.4 汉诺塔问题 . . . . linearLogRecur(n/2) for i := 0.0; i < n; i++ { count++ } return count } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑13 线性对数阶的时间复杂度0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.3 二叉树数组表示 12.2 分治搜索策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.3 构建二叉树问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 12.4 汉诺塔问题 . . . . + linearLogRecur(n/2) for i := 0; i < n; i++ { count++ } return count } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度0 码力 | 384 页 | 18.49 MB | 10 月前3
Go 入门指南(The way to Go)Rect1 struct {Min, Max Point } type Rect2 struct {Min, Max *Point } 递归结构体 结构体类型可以通过引用自身来定义。这在定义链表或二叉树的元素(通常叫节点)时特别有用,此时节 点包含指向临近节点的链接(地址)。如下所示,链表中的 su ,树中的 ri 和 le 分别是指向别的节点 的指针。 链表: 这块的 data 字段用于存放有效数据(比如 float64 su *Node } 二叉树: 二叉树中每个节点最多能链接至两个节点:左节点(le)和右节点(ri),这两个节点本身又可以有左右节 点,依次类推。树的顶层节点叫根节点(root),底层没有子节点的节点叫叶子节点(leaves),叶子节 点的 le 和 ri 指针为 nil 值。在 Go 中可以如下定义二叉树: type Tree strcut { le 1中我们遇到了诸如列表和树这样的数据结构,在它们的定义中使用了一种叫节点的递归结构体类 型,节点包含一个某种类型的数据字段。现在可以使用空接口作为数据字段的类型,这样我们就能写出通 用的代码。下面是实现一个二叉树的部分代码:通用定义、用于创建空节点的 NewNode 方法,及设置 数据的 SetData 方法. 示例 11.10 node_structures.go: package main import0 码力 | 380 页 | 2.97 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Go 版链式地址 鏈結位址 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 码力 | 385 页 | 18.80 MB | 10 月前3
Go 入门指南(The way to Go)struct {Min, Max Point } 2. type Rect2 struct {Min, Max *Point } 递归结构体 结构体类型可以通过引用自身来定义。这在定义链表或二叉树的元素(通常叫节点)时特别有用,此时节点包含指向 临近节点的链接(地址)。如下所示,链表中的 su ,树中的 ri 和 le 分别是指向别的节点的指针。 链表: 这块的 data su *Node 5. } 二叉树: 二叉树中每个节点最多能链接至两个节点:左节点(le)和右节点(ri),这两个节点本身又可以有左右节点,依次 类推。树的顶层节点叫根节点(root),底层没有子节点的节点叫叶子节点(leaves),叶子节点的 le 和 ri 指针为 nil 值。在 Go 中可以如下定义二叉树: 1. type Tree strcut { 1中我们遇到了诸如列表和树这样的数据结构,在它们的定义中使用了一种叫节点的递归结构体类型,节点包含 一个某种类型的数据字段。现在可以使用空接口作为数据字段的类型,这样我们就能写出通用的代码。下面是实现一 个二叉树的部分代码:通用定义、用于创建空节点的 NewNode 方法,及设置数据的 SetData 方法. 示例 11.10 node_structures.go: 1. package main0 码力 | 466 页 | 4.44 MB | 1 年前3
共 13 条
- 1
- 2













