算法
simba lin
这个作者很懒,什么都没留下…
展开
-
LeetCode 108 有序数组转换成二叉搜索树
其实也是一个递归的问题, 将有序数组从中间拿一个元素作为中心结点, 然后两边又是相同的子问题 def sortedArrayToBST(nums: Array[Int]): TreeNode = { def go(from: Int, to:Int) :TreeNode = { if(to < from) { null } e...原创 2019-05-18 14:44:25 · 122 阅读 · 0 评论 -
LeetCode 109 有序链表转换成二叉搜索树
相比于LeetCode 108 , 这道题变成了中等难度的题目, 在 107 中, 我使用的是以中心点作为分割, 然后数组左右两部分分别作为左子树和右子树去进行递归, 这道题我也打算使用这个思路, 步骤为: 1. 找到链表的中心位置. 2. 构造子树 3. 递归 问题在于如何找到链表的中心节点? LeetCode 前面的有关于链表的题目, 经常是会使用"快慢指针"的方法: ...原创 2019-05-18 15:10:03 · 304 阅读 · 0 评论 -
LeetCode 110 平衡二叉树的判断
树的算法大多都是递归的, 树本身就是一种非常递归的结构. 要判断是不是平衡二叉树, 题目也说了, 左右两个子树的高度差绝对值不超过1, 那我们非常朴素的, 每次都计算子树的最大高度,然后相减就看看符不符合标准就行了. 从结构上看好像是有两层递归在里面, em.. 估计特别容易爆栈 def isBalanced(root: TreeNode): Boolean = { ...原创 2019-05-18 15:19:03 · 192 阅读 · 0 评论 -
LeetCode 111 二叉树的最小深度
还是递归, 简单难度, 本质上是一种遍历, 唯一要注意的就是 只有 node 的左右结点均为 null 的时候才需要去更新最小值 def minDepth(root: TreeNode): Int = { var min : Option[Int] = None def go(node: TreeNode, level: Int = 0): Unit = { ...原创 2019-05-18 15:26:11 · 245 阅读 · 0 评论 -
LeetCode 112 路径总和 / LeetCode 113 路径总和II
递归还是递归呀, 真的是 递归写到吐, 112 就是简单判断是与不是咯, 递归地返回布尔值就行了 113的话, 思路类似,就是用一个List去保存结果, 不怎么怎么就变成中等难度了, 大概是有新的解法? 源代码:https://gitee.com/sparrowxin/AlgoTemp ...原创 2019-05-18 15:34:07 · 164 阅读 · 0 评论 -
LeetCode 114 二叉树展开为链表
从题目的例子中看, 它是这样的一个转换过程: 1 左子树经过转换后放到父节点的右节点上 2 原来的右节点进行相同的转换, 然后接到 1 中的最后一个节点上去 还是一个递归的过程 除了过程中的判断有点繁琐之后, 思路上并不困难 def flatten(root: TreeNode): Unit = { def go(node:TreeNode): TreeNode ...原创 2019-05-18 16:01:56 · 146 阅读 · 0 评论 -
LeetCode 105 从先序和中序遍历构建二叉树
这道题目在 《剑指Offer》一书中有提到过,也有解析的过程,不过时间隔得久,大概只有潜意识的印象了。 初看这道题有点让人摸不着头脑,虽然一直强调树的算法一般是递归的算法,就算是递归算法,也无从下手 那就先举个例子先画几个图看看情况, 以这棵树为例 我们先把前序遍历和中序遍历列在一起, 然后将对应关系用箭头连接起来 首先是 红色的箭头, 前序遍历的第0个元素对应中序遍历的第1个...原创 2019-05-18 20:21:00 · 179 阅读 · 0 评论