07 2017 档案

摘要:题目:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 给一棵二叉树 {3,9,20,#,#,15,7} : 返回他的分层遍历结果: 阅读全文
posted @ 2017-07-28 21:13 JunLiu37 阅读(1340) 评论(0) 推荐(0)
摘要:题目:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。 你需要保证该树仍然是一棵二叉查找树。 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 阅读全文
posted @ 2017-07-26 11:16 JunLiu37 阅读(3906) 评论(0) 推荐(0)
摘要:题目:给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。 思路:用递归实现,root满足条件时候,将root加入result中, 阅读全文
posted @ 2017-07-26 09:46 JunLiu37 阅读(1136) 评论(0) 推荐(0)
摘要:题目:给定一个位于二叉查找树中的节点,找出其中序后继。 定义: 前驱节点 类似,我么可以得到求后继节点的规则。 后继节点 例如: 节点5在后序遍历的后序节点就是6,沿着其节点5的父节点往上找到第一个节点P为其父节点Q的左孩子,则Q即为节点5的后序 Java代码: 阅读全文
posted @ 2017-07-25 15:35 JunLiu37 阅读(469) 评论(0) 推荐(0)
摘要:题目:将一个二叉查找树按照中序遍历转换成双向链表。 给定一个二叉查找树: 返回 1<->2<->3<->4<->5。 思路:如果对于当前节点,把右子树转换成双向链表,然后把左子树转换成双向链表,转换的时候我们都标记了链表的头节点和尾节点,那么只需要将当前节点和左子树的尾部相连,和右子树的头部相连即可 阅读全文
posted @ 2017-07-24 21:36 JunLiu37 阅读(659) 评论(0) 推荐(0)
摘要:摘抄自:https://segmentfault.com/a/1190000003554858#articleHeader2 题目: Given a binary tree, find the maximum path sum. The path may start and end at any n 阅读全文
posted @ 2017-07-23 11:58 JunLiu37 阅读(2905) 评论(0) 推荐(0)
摘要:题目: 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。 一个有效的路径,指的是从根节点到叶节点的路径。 代码加思路: 阅读全文
posted @ 2017-07-21 23:44 JunLiu37 阅读(1239) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2017-07-15 18:05 JunLiu37 阅读(2) 评论(0) 推荐(0)
摘要:题目: 给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。 最近公共祖先是两个节点的公共的祖先节点且具有最大深度。 LCA(3, 5) = 4 LCA(5, 6) = 7 LCA(6, 7) = 7 Java代码: 阅读全文
posted @ 2017-07-15 16:11 JunLiu37 阅读(2474) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2017-07-14 00:23 JunLiu37 阅读(0) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2017-07-13 16:40 JunLiu37 阅读(0) 评论(0) 推荐(0)
摘要:题目:给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7} 阅读全文
posted @ 2017-07-13 10:26 JunLiu37 阅读(308) 评论(0) 推荐(0)
摘要:深度优先算法(DFS):和先序遍历差不多,是沿着树的深度遍历树的节点,尽可能深的搜索树的分支,一般是跟节点,左分支和右分支的顺序来进行查找的。因此可以借助堆栈的数据结构,由于堆栈是后进先出的顺序,由此可以先将右子树压栈,然后再对左子树压栈,这样一来,左子树结点就存在了栈顶上,因此某结点的左子树能在它 阅读全文
posted @ 2017-07-12 15:19 JunLiu37 阅读(387) 评论(0) 推荐(0)
摘要:题目:给一棵二叉树,找出从根节点到叶子节点的所有路径。 思路(First Version):这道题要打印根节点到叶子节点的全部路径, 曾经我们有总结过,如果是输出全部路径的题目,那一定会想到深度搜索的方式。接下来怎么打印呢?只需要在深度优先搜索的每一层的时候用Arraylist保存从根节点 到当前节 阅读全文
posted @ 2017-07-12 14:58 JunLiu37 阅读(286) 评论(0) 推荐(0)
摘要:public class Solution { /** * @param root: The root of binary tree. * @return: An integer. */ //First Version // public int maxDepth(TreeNode root) { // // write y... 阅读全文
posted @ 2017-07-12 09:18 JunLiu37 阅读(156) 评论(0) 推荐(0)
摘要:这种算法只用到了一次入栈一次出栈就可以了, 九章算法: 递归实现: 阅读全文
posted @ 2017-07-11 21:00 JunLiu37 阅读(293) 评论(0) 推荐(0)
摘要:题目:给出一棵二叉树,返回其节点值的前序遍历。(非递归实现) 思路:从根节点开始找,先访问根节点,将该节点压如栈中,然后指向该节点的左孩子,在判断这个左孩子是否为空,如果不为空那么继续访问该节点并将其压如栈中,并指向该左孩子的左孩子,继续判断是否为空;如果他的左孩子为空那么弹出栈定元素,进行出栈,然 阅读全文
posted @ 2017-07-11 16:12 JunLiu37 阅读(189) 评论(0) 推荐(0)
摘要:题目: Given a rotated sorted array, recover it to sorted array in-place. Have you met this question in a real interview? Yes Given a rotated sorted arra 阅读全文
posted @ 2017-07-11 10:01 JunLiu37 阅读(220) 评论(0) 推荐(0)
摘要:题目: 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。 思路: 中点mid大于左右相邻点 阅读全文
posted @ 2017-07-10 09:47 JunLiu37 阅读(384) 评论(0) 推荐(0)
摘要:题目:在一个先升序后降序的数组中找到最大值,如果没找到就返回-1; [ 1,4,6,8,6,4,3,2] return 8; [10,9,8,7,6,5] return 10 思路:由于没有像其他数列一样给出一个特定值,这个时候需要一个可以用找到中间值M1 和M1+1进行判断,如果[M1] >[M1 阅读全文
posted @ 2017-07-09 22:50 JunLiu37 阅读(232) 评论(0) 推荐(0)
摘要:题目:给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。 如果目标值不在数组中,则返回[-1, -1] 思路:如果中点等于target就要将数组分为两部分来查找即:0-mid和mid-end,中点的左右部分分别来找第一个和最后一个target值;左边,只考虑mid值 阅读全文
posted @ 2017-07-09 17:04 JunLiu37 阅读(323) 评论(0) 推荐(0)
摘要:题目: 写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 1 每行中的整数从左到右是排序的。 2 每行的第一个数大于上一行的最后一个整数。 考虑下列矩阵: 给出 target = 3,返回 true 解题思路: 首先在第一列上面找到target值所在的行号,可以先找到第一个大 阅读全文
posted @ 2017-07-08 17:28 JunLiu37 阅读(224) 评论(0) 推荐(0)
摘要:题目:一个二维数组里面是由1和0构成的,里面所有的1都是相互关联的,有且只有一块由连续1构成的区域,请找出来最小能包括所有1的矩形, 前提:给出一个任意二维数组以及其中的一个1的元素的x和y坐标。 0,1,1,0 例如:int [2][3]a={{0,0,1,0}, 1 这一行含有1,映射到行边上为 阅读全文
posted @ 2017-07-08 11:32 JunLiu37 阅读(358) 评论(0) 推荐(0)
摘要:题目:假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 你可以假设数组中不存在重复的元素。 思路:首先排除三种极端情况,空,只有一个元素,以及整个数组都是顺序排列的。 当顺序的数组随机旋转排列后,就分为两个 阅读全文
posted @ 2017-07-06 22:17 JunLiu37 阅读(165) 评论(0) 推荐(0)
摘要:第一个出错的版本号 代码库的版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。 你可以通过 isBadVersion 的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注 阅读全文
posted @ 2017-07-06 15:43 JunLiu37 阅读(224) 评论(0) 推荐(0)
摘要:用二分法查找顺序数组中key值出现的最后一个位置 基本思路,将顺序数组两边掐,最后掐到只剩下两个元素,前面的那一个就是target值。如果key值等于中间值的话就掐掉中间值的左边一部分,继续往后对比中间值,如果下雨则中间值右边部分...,这样最后会只剩下两个相邻的元素,左边的那个既是。 二分法模板: 阅读全文
posted @ 2017-07-06 11:15 JunLiu37 阅读(414) 评论(0) 推荐(0)
摘要:这是我的第一个算法题目,希望通过此方法来要求自己努力进步。 题目 :二分法的实现 前提条件:带操作的数组为一个有序的数组。 基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置midlle开始比较, 如果当前位置array[midlle]值等于key,则查找成功; 若key小于当前位 阅读全文
posted @ 2017-07-05 20:55 JunLiu37 阅读(462) 评论(0) 推荐(0)