leetcode-0101 对称二叉树

2020-04-25
阅读 2 分钟
949
本题最简单的思路是递归,可以假设两棵一模一样的树在进行镜像对比。他们之间的关系满足node1.left == node2.right且node1.right == node2.left时间复杂度O(n) n为节点的个数;空间复杂度O(h) h为二叉树的最大深度

leetcode-0543 二叉树的直径

2020-04-25
阅读 2 分钟
994
我们可以考虑在每个节点时,都去计算该节点左子树和右子树的最大高度。这样会包含大量的重复计算在里面。时间复杂度O(n^2) 空间复杂度O(n)

leetcode-0617 合并二叉树

2020-04-24
阅读 2 分钟
1.1k
递归的话我们首先需要递归的终止条件,对于本题而言,递归的终止条件是t1和t2递归到任意一方为null的情况,因为这种条件下,我们不需要继续合并下去,直接返回不为null那一方即可。整体递归的过程就比较简单了,分为三个步骤

leetcode-0104 二叉树的最大深度

2020-04-24
阅读 2 分钟
903
时间复杂度O(n) 空间复杂度O(h),空间复杂度主要用于递归栈的深度h 本地使用递归的方式解题非常简单,首先递归终止的条件就是递归到当前节点为null的情况。

leetcode-0108 将有序数组转化为二叉搜索树

2020-04-24
阅读 1 分钟
1.5k
首先我们要知道对一棵二分搜索树进行中序遍历得到的结果也是从小到大顺序的,根据题目所给的数组也是从小到大,我们可以很自然的联想到中序遍历。 对于中序遍历DFS来说,我们可以考虑以下几个方面: 子问题:构造树的每个节点以及该节点的左右子树 递归过程

leetcode-0226 翻转二叉树

2020-04-24
阅读 2 分钟
1.1k
时间复杂度O(n) 空间复杂度O(n) 递归的思路首先要找到递归的终止条件,这题递归的终止条件必须要是当前的节点为null才可以结束递归。或者我们可以换个角度来思考,如果这个节点不为null,那它就可能还存在子节点,这种情况我们是可以继续向下递归的。 第二个使我们必须了解递归的过程,本题的递归主要是为了翻转node节点...

leetcode-0003 无重复字符的最长子串

2020-04-17
阅读 1 分钟
1.4k
题目地址 [链接] 1.滑动窗口 时间复杂度O(n) 空间复杂度O(1) {代码...} 更多leetcode题解和数据结构方面的知识,请关注我的github:https://github.com/GuoLizhi/

leetcode-0002 两数相加

2020-04-17
阅读 1 分钟
1.1k
题目地址 [链接] 1. 链表遍历操作 时间复杂度O(n) 空间复杂度O(n) {代码...} 更多leetcode题解和数据结构方面的知识,请关注我的github:https://github.com/GuoLizhi/

leetcode-0001 两数之和

2020-04-16
阅读 2 分钟
1k
题目地址:[链接] 1.暴力解法 直接双重循环,枚举出所有可能的解,时间复杂度为O(n^2),空间复杂度为O(1) {代码...} 2.HashTable 第一次循环将数组nums中的每个数都放入map中 第二次循环判断target - nums[i]是否在map中 时间复杂度O(n), 空间复杂度O(1) {代码...} 3.HashTable优化版 一次循环,先检查map中是否含有targ...

TypeScript算法与数据结构-队列和循环队列

2019-08-06
阅读 3 分钟
2.2k
队列也是一种线性的数据结构, 队列是一种先进先出的数据结构。类似于生活中的排队买东西,先进入队列的人可以先购买到东西。这次的队列具体实现依然会采用之前自己封装好的数组,具体的优势依然是我们可以清晰的算出每次操作的时间复杂度。对于基本的队列而言,主要包含两个基本的操作入队(enqueue)和出队(dequeue)。 ...

TypeScript版算法与数据结构-栈

2019-07-16
阅读 2 分钟
2.1k
栈也是一种使用非常广泛的线性数据结构,它具有后进先出last in first out的特点。就像我们平时一本一本的往桌上放书,等到我们又想用书时,我们首先接触到的总是我们最后一本放上去的书。 栈的添加和删除操作总是在栈的一端完成,这一端被称为栈顶,对于栈的实现,我会采用上一篇中实现的数组作为底层的数据结构,所有...

TypeScript版算法与数据结构-数组

2019-07-16
阅读 3 分钟
2.1k
数组是数据结构中最简单,也是使用最广泛的一种。在原生的js中,数组给我们提供了很多方便的操作方法,比如push(), pop(), shift(), unshift()。但出于对数据结构的学习,我将不依赖这些方法,只是使用数组简单的存储元素功能,另外我会假定数组是定长数组。这样也方便我们计算相关的时间复杂度。另外我会使用TypeScript...