二叉树的最小深度 LeetCode: "二叉树的最小深度" 题目描述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点 示例: 思想: 还是递归,没啥特别的 代码 我的第一遍代码: 优化之后: if(x == 0||y ...
分类:
编程语言 时间:
2020-04-19 11:17:51
阅读次数:
76
对称二叉树 LeetCode: "对称二叉树" 题目描述: 给定一个二叉树,检查它是否是镜像对称的。 示例: 思想: 1.怎么判断一棵树是不是对称二叉树? 答案:如果所给根节点,为空,那么是对称。如果不为空的话,当他的左子树与右子树对称时,他对称 2.那么怎么知道左子树与右子树对不对称呢?在这我直接 ...
分类:
编程语言 时间:
2020-04-19 11:07:59
阅读次数:
50
另一棵树的子树 LeetCode: "另一棵树的子树" 题目描述: 给定两个非空二叉树 s 和 t,检验?s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例: 思想: 双递归,注意下面的代码 可以简化为: ...
分类:
编程语言 时间:
2020-04-19 10:54:00
阅读次数:
165
平衡二叉树 LeetCode: "平衡二叉" 题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 示例: 思想: 使用实例域变量记录是否与有不满足平衡的节点出现,使用一次递归即可。 代码 ...
分类:
编程语言 时间:
2020-04-17 11:11:37
阅读次数:
61
分治策略 分治策略是一种解决问题的思路: 将问题分为若干更小规模的部分 通过解决每一个小规模问题,并将结果汇总得到原问题的解。 PS:递归问题则体现了分治策略。 优化问题和贪心策略 1.优化问题例子:找零兑换问题 让自动售货机每次找零给顾客最少数量硬币。 贪心策略解决:我们每次都试图解决问题尽量大的 ...
分类:
编程语言 时间:
2020-04-16 19:35:55
阅读次数:
70
数据结构和算法本身解决的是,如何让代码运行得更快,如何让代码更省存储空间。所以就分为两个维度分析,时间复杂度、空间复杂度。复杂度分析能事先初略的估计算法的执行效率。 时间复杂度 大O复杂度表示法 大O符号是由德国数论学家保罗·巴赫曼(Paul Bachmann)在其1892年的著作《解析数论》(An ...
分类:
编程语言 时间:
2020-04-16 16:47:38
阅读次数:
70
几乎在每一种编程语言中,都有数组这个数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常基础、简单,但是我们真的理解了它的精髓吗?在大部分编程语言中,数组都是从 0 开始编号的。为什么数组要从 0 开始编号,而不是从 1 开始呢?从 1 开始不是更符合人类 ...
分类:
编程语言 时间:
2020-04-16 00:27:05
阅读次数:
63
字典树 Trie树的本质,就是利用字符串之间的公共前缀,把重复的前缀合并在一起。 (图片来自于比《数据结构与算法之美》) 根节点不包含任何信息,每个节点表示一个字符串中的字符,从根节点到红色节点(并不一定都是叶子节点,红色节点表示到此为止是一个字符)的一条路径表示为字符串 代码实现 1. 经典存储方 ...
分类:
其他好文 时间:
2020-04-09 21:34:06
阅读次数:
77
Datawhale 数据结构与算法 1数组 数组是一种常用的数据结构 可以看作是线性表的推广 数据元素多样,但必须属于同一数据类型 1.1 逻辑结构 数组是n(N =1)个相同数据类型的数据元素的有限序列; 数组是具有固定格式和数量的数据有序集; 注意:在数据上不能进行插入、删除数据元素等操作 数组 ...
分类:
编程语言 时间:
2020-04-07 22:30:13
阅读次数:
74
一、大 O 复杂度表示法 算法的执行效率,粗略地讲,就是算法代码执行的时间。但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行时间呢?这里有段非常简单的代码,求 1,2,3…n 的累加和。现在,来估算一下这段代码的执行时间。 1 int cal(int n) { 2 int sum = 0 ...
分类:
编程语言 时间:
2020-04-07 12:41:24
阅读次数:
81