09 2018 档案

摘要:设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间 阅读全文
posted @ 2018-09-27 13:47 yuyin 阅读(138) 评论(0) 推荐(0)
摘要:给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。 给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 1 。 示例 1: 说明: 最小的值是 2 ,第二小的 阅读全文
posted @ 2018-09-25 16:46 yuyin 阅读(108) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 示例 2: 思路: 遍历二叉搜索树,按顺序存储即可 阅读全文
posted @ 2018-09-25 15:17 yuyin 阅读(228) 评论(0) 推荐(0)
摘要:你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 示例 2: 解释: 和第一个示例相似, 除了我们不能省略第一个对括号来中断输入和输出之间的一对一映 阅读全文
posted @ 2018-09-25 12:49 yuyin 阅读(122) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。 案例 1: 案例 2: 思路: 遍历二叉树,检查k和当前节点值的差是否存在哈希表中,如果存在返回True即可 阅读全文
posted @ 2018-09-25 11:14 yuyin 阅读(90) 评论(0) 推荐(0)
摘要:给定 和 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 代表退格字符。 示例 1: 示例 2: 示例 3: 示例 4: 提示: `1 阅读全文
posted @ 2018-09-21 22:19 yuyin 阅读(99) 评论(0) 推荐(0)
摘要:给定一个二叉树,它的每个结点都存放一个 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 代表数字 。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 示例 1: 示例 2: 思路: 二叉树先序遍历 用数组存储所有二叉树路径的字符串,最后转换 阅读全文
posted @ 2018-09-21 21:41 yuyin 阅读(82) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 思路: 先递归到右子树的最右的叶子节点开始,逐渐累加 到根节点后,将右子树的累加和加到根节点,然后转化左子树 阅读全文
posted @ 2018-09-21 16:38 yuyin 阅读(96) 评论(0) 推荐(0)
摘要:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 , 思路: 与257二叉树的所有路径类似,先序遍历二叉树 注意利用列表存储遍历的路径时,递归传入参数时需要深拷贝(python) 当遍历到 阅读全文
posted @ 2018-09-21 14:53 yuyin 阅读(60) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 解释: 所有根节点到叶子节点的路径为: 1 2 5, 1 3 思路: 二叉树的先序遍历 用一个数组存储所有路径,用helper函数递归遍历二叉树,当遍历到叶子节点时,将路径放入数组中 阅读全文
posted @ 2018-09-21 14:31 yuyin 阅读(127) 评论(0) 推荐(0)
摘要:您需要在二叉树的每一行中找到最大的值。 示例: 思路: 二叉树层序遍历的基础上改进 每层遍历结束后得到最大值存储列表中 阅读全文
posted @ 2018-09-21 12:51 yuyin 阅读(71) 评论(0) 推荐(0)
摘要:计算给定二叉树的所有左叶子之和。 示例: 在这个二叉树中,有两个左叶子,分别是 和 ,所以返回 思路: 递归的方法解决 判断当前节点的左子节点是否是叶子节点 递归处理当前节点的左子树和右子树 阅读全文
posted @ 2018-09-21 11:25 yuyin 阅读(76) 评论(0) 推荐(0)
摘要:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树 返回 , 它的长度是路径 或者 。 注意:两结点之间的路径长度是以它们之间边的数目表示。 思路: depth函数递归求解左子树和右子树的高度,两者之和即为经过 阅读全文
posted @ 2018-09-21 10:42 yuyin 阅读(85) 评论(0) 推荐(0)
摘要:请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 举个例子,如上图所示,给定一颗叶值序列为 的树。 如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 的。 如果给定的两个头结点分别为 和`root2`的树是叶相似的,则返回 true;否则返回 false 。 阅读全文
posted @ 2018-09-21 09:46 yuyin 阅读(87) 评论(0) 推荐(0)
摘要:给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 个节点。 示例: 思路: 从根节点开始遍历左子树的高度和右子树的高度 左 阅读全文
posted @ 2018-09-20 18:10 yuyin 阅读(357) 评论(0) 推荐(0)
摘要:给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 ( 节点 X 的子树为 X 本身,以及所有 X 的后代。) 示例1: 解释: 只有红色节点满足条件“所有不包含 1 的子树”。 右图为返回的答案。 示例2: 示例3: 说明: 给 阅读全文
posted @ 2018-09-20 16:29 yuyin 阅读(66) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在 中 (R =L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 思路: 递归 根节点为空时,返回None 根节点值小于L时,剪去根节点和左子树,修剪右子树 根节点值大于R时 阅读全文
posted @ 2018-09-20 14:46 yuyin 阅读(93) 评论(0) 推荐(0)
摘要:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 1. 左子树是通过数组中最大值左边部分构造出的最大二叉树。 2. 右子树是通过数组中最大值右边部分构造出的最大二叉树。 3. 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 Example 阅读全文
posted @ 2018-09-20 14:01 yuyin 阅读(170) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6, 阅读全文
posted @ 2018-09-19 17:31 yuyin 阅读(112) 评论(0) 推荐(0)
摘要:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。 注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。 例如, 你可以返回这个二叉搜索树: 或者这个树也是有效的: 阅读全文
posted @ 2018-09-19 16:56 yuyin 阅读(122) 评论(0) 推荐(0)
摘要:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 例如, 你应该返回如下子树: 在上述示例中,如果要找的值是 ,但因为没有节点值为 ,我们应该返回 。 思路: 采用递归的方法 根节点为空时,返回No 阅读全文
posted @ 2018-09-19 16:31 yuyin 阅读(100) 评论(0) 推荐(0)
摘要:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: , 一个可能的答案是: , 它可以表示下面这个高度平衡二叉搜索树: 思路: 将有序链表的数值读出,存入到列表 阅读全文
posted @ 2018-09-19 15:55 yuyin 阅读(81) 评论(0) 推荐(0)
摘要:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: `[ 10, 3,0,5,9], 一个可能的答案是: ,它可以表示下面这个高度平衡二叉搜索树: 思路: 采用递归的方法, 阅读全文
posted @ 2018-09-19 15:32 yuyin 阅读(81) 评论(0) 推荐(0)
摘要:给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 注意: 您可以假设树(即给定的根节点)不为 NULL。 思路: 利用辅助队列, 每次pop一个节点时,检查左右子树是否为空,如果不为空,按照push右子树,再push左子树的顺序将子节点压入栈中 当队列最后为空时,最后一次pop 阅读全文
posted @ 2018-09-19 12:40 yuyin 阅读(85) 评论(0) 推荐(0)
摘要:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 注意: 合并必须从两个树的根节点开始。 思 阅读全文
posted @ 2018-09-19 11:41 yuyin 阅读(84) 评论(0) 推荐(0)
摘要:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 示例 2: 解释: 从左向右读, 为 121 。 从右向左读, 为 121 。因此它不是一个回文数。 示例 3: 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字 阅读全文
posted @ 2018-09-19 10:09 yuyin 阅读(76) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 , 返回锯齿形层次遍历如下: 思路: 用两个栈结构,stack_1存储当前层的节点,stack_2存储下一层的节点,压入栈的顺序利用flag交替控制,当sta 阅读全文
posted @ 2018-09-18 22:34 yuyin 阅读(86) 评论(0) 推荐(0)
摘要:给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1 : 示例 2 : 思路: 对于每个节点,用depth函数获得其左右子节点的深度,如果子树是平衡的,返回真实的深度,如果子树是不平衡的,立即返回 阅读全文
posted @ 2018-09-18 21:50 yuyin 阅读(87) 评论(0) 推荐(0)
摘要:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 , 返回 , 因为存在目标和为 的根节点到叶子节点的路径 。 思路: 树为空时,返回False 当节点的子树不存在时 阅读全文
posted @ 2018-09-18 13:44 yuyin 阅读(67) 评论(0) 推荐(0)
摘要:给定一个N叉树,找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 例如,给定一个 : 我们应返回其最大深度, 。 说明 : 树的深度不会超过 。 树的节点总不会超过 。 思路: 用递归解决 阅读全文
posted @ 2018-09-18 12:56 yuyin 阅读(70) 评论(0) 推荐(0)
摘要:给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 是对称的。 但是下面这个 则不是镜像对称的: 说明: 如果你可以运用递归和迭代两种方法解决这个问题,会很加分。 递归法 子树p和q的值相等,而且p的左子树和q的右子树对称,p的右子树和q的左子树对称 迭代法 用一个栈来维护节点的插入,注意插入顺 阅读全文
posted @ 2018-09-18 07:23 yuyin 阅读(99) 评论(0) 推荐(0)
摘要:翻转一棵二叉树。 示例 : 4 / \ 2 7 / \ / \ 1 3 6 9 4 / \ 7 2 / \ / \ 9 6 3 1 python Definition for a binary tree node. class TreeNode: def __init__(self, x): sel 阅读全文
posted @ 2018-09-17 22:38 yuyin 阅读(71) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回它的中序 遍历。 示例 : 进阶 : 递归算法很简单,你可以通过迭代算法完成吗? 递归法 迭代法 思路: 用栈做临时存储 从根节点开始遍历,到最左的子节点,然后输出再访问右节点 阅读全文
posted @ 2018-09-17 22:09 yuyin 阅读(57) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回它的 前序 遍历。 示例 : 输出: [1,2,3] 进阶 : 递归算法很简单,你可以通过迭代算法完成吗? 递归法 迭代法 思路: 使用辅助栈 当根节点为空时,返回空列表,否则将根节点压入栈中 栈顶弹出节点,将节点的值插入到结果列表中,检查弹出节点的左右节点是否为空,按照右,左的 阅读全文
posted @ 2018-09-17 14:38 yuyin 阅读(116) 评论(0) 推荐(0)
摘要:给定一个N叉树,返回其节点值的后序遍历。 例如,给定一个 3叉树 : "" 返回其后序遍历: [5,6,3,2,4,1]. 说明: 递归法很简单,你可以使用迭代法完成此题吗?! 递归解法 思路: 用栈的结构和递归的方法后续遍历N叉树 当根节点为空时,返回空列表 当根节点的子节点列表为空时,返回仅存放 阅读全文
posted @ 2018-09-17 14:16 yuyin 阅读(268) 评论(0) 推荐(0)
摘要:给定一个N叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 例如,给定一个 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 。 树的节点总数不会超过 。 思路: 与之前的二叉树层次遍历类似,用队列实现 每个节点出队列时,将其子节点压入队列中 阅读全文
posted @ 2018-09-17 11:37 yuyin 阅读(164) 评论(0) 推荐(0)
摘要:给定一个N叉树,返回其节点值的前序遍历。 例如,给定一个 : 返回其前序遍历: [1,3,5,6,2,4]。 说明: 递归法很简单,你可以使用迭代法完成此题吗? 递归解法 思路: 判断根节点为空的情况,返回[] 判断子节点为空的情况,返回根节点的值 子节点不为空的情况,先遍历根节点,再前序遍历第一个 阅读全文
posted @ 2018-09-17 09:50 yuyin 阅读(106) 评论(0) 推荐(0)
摘要:给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 示例 2: 示例 3: 思路: 递归思想 从根节点开始比较两颗树,如果两个节点均为空返回True,只有一个为空时返回False 如果两个节点均不为空,当节点的值以及左右树 阅读全文
posted @ 2018-09-17 09:24 yuyin 阅读(91) 评论(0) 推荐(0)
摘要:给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1 : 注意 : 节点值的范围在32位有符号整数范围内。 思路:和102二叉树的层次遍历类似,每层遍历结束后存储节点的平均值即可。 阅读全文
posted @ 2018-09-15 16:35 yuyin 阅读(82) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 , 返回其自底向上的层次遍历为: 思路: 与102层次遍历类似,逆序添加到结果列表中即可。 阅读全文
posted @ 2018-09-15 15:53 yuyin 阅读(71) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: , 返回其层次遍历结果: 思路: 根节点为空时,返回[] 每层的树节点值存在一个list中,所以需要注意处理每层最右侧的树节点 current_layer_last指向当前层的最右节点,next_ 阅读全文
posted @ 2018-09-15 15:30 yuyin 阅读(93) 评论(0) 推荐(0)
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明 : 叶子节点是指没有子节点的节点。 示例 : 给定二叉树 , 思路: 根节点为空时,返回0,递归返回 树节点没有左右子节点时,返回1 树节点只有左子节点时,返回左子节点的最小深度并加1 树节点只有右子节 阅读全文
posted @ 2018-09-15 11:55 yuyin 阅读(88) 评论(0) 推荐(0)
摘要:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明 : 叶子节点是指没有子节点的节点。 示例 : 给定二叉树 , 返回它的最大深度 3 。 思路: 如果根节点为空,则深度为0 如果根节点不为空,分别计算左子树和右子树的最大深度,比较哪个更大,返回并加1( 阅读全文
posted @ 2018-09-15 11:07 yuyin 阅读(107) 评论(0) 推荐(0)
摘要:在K&R的开头碰到了getchar函数的用法有些迷糊,在查找了一些资料以及动手实践后有了大致的了解。 1. getchar函数,是从缓冲区读取数据的,而不是直接从键盘输入中读取数据的 2. 键盘的输入会保存在缓冲区中,同时会显示在屏幕上 3. getchar函数执行时,每次从缓冲区中读取一个字符 3 阅读全文
posted @ 2018-09-12 17:12 yuyin 阅读(403) 评论(0) 推荐(0)