
剑指Offer
小萨摩
这个作者很懒,什么都没留下…
展开
-
剑指offer 二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 例如,输入数组a={5,7,6,9,11,10,8}在后序遍历中,最后一个是树的根节点的值。二叉搜索树中,左子树节点都比根节点小,右子树节点都比根节点大。以数组a为例,前3个数字5、7、5都比根节点小,是根节点的左子树,9、11...原创 2019-02-15 11:49:38 · 210 阅读 · 1 评论 -
剑指offer 把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。和层次遍历类似,为了把二叉树的每一行单独打印到一行里,需要增加两个变量,一个变量记录当前层中还没有打印的节点数,另一个变量记录下一层的节点数目。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/*...原创 2019-02-14 11:58:04 · 158 阅读 · 0 评论 -
剑指offer 从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 就是二叉树的层次遍历,用队列,根节点入队列,每次打印一个节点时,如果该节点有子节点,则子节点放入队尾,直到队列中所有的节点都被打印出来。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * @...原创 2019-02-14 11:36:46 · 151 阅读 · 0 评论 -
剑指offer 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 我们的第一反应可能是每次压入一个新元素进栈时,将栈里的元素排序,让最小的元素位于栈顶,这样能在O(1)时间内,但这样不能保证最后压入栈的元素最先出栈,这样的数据结构已经不是栈了。接着我们可以想到保存最小的元素,但是当最小的元素被弹出后,如何得到下一个最小的元素?我们可...原创 2019-02-14 10:17:33 · 179 阅读 · 0 评论 -
剑指offer 最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解法一:根据快速排序,基于数组的第k个数字来调整,使得k左边的数字都小于k,k右边的数字都大于k。调整后,左边的k个数字就是最小的k个数字,时间复杂度O(n)。/** * @author yuan * @date 2019/2/19 * @...原创 2019-02-19 13:38:58 · 223 阅读 · 0 评论 -
剑指offer 对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。可以通过二叉树的前序遍历和对称前序遍历来判断二叉树是否对称。对称前序遍历:先遍历右节点,在遍历左节点。其实就是利用了二叉树的遍历。/** * @author yuan * @date 2019/2/13 * @description */publi...原创 2019-02-13 11:24:54 · 137 阅读 · 0 评论 -
剑指offer 二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2019-02-13 11:09:50 · 123 阅读 · 0 评论 -
剑指offer 树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)第一步:在树A中查找与根节点相等的节点,可以用递归。第二步:判断A中以某个根节点的子树是否和树B具有相同的子树,同样可以用递归实现。注意空指针的处理。/** * @author yuan * @date 2019/2/13 * @description */publi...原创 2019-02-13 10:56:12 · 108 阅读 · 0 评论 -
剑指offer 合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:先比较链表1的头节点的值和链表2的头节点的值,将小的做为新链表的头节点,接下来继续比较。。(递归)例如图:1比2小,作为新链表的头部,继续比较2和3。。。当list1为null时,合并后即为list2。同样,当list2为null时,合并后即为list1。/** * @auth...原创 2019-02-12 16:37:37 · 114 阅读 · 0 评论 -
剑指offer 反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。需要定义3个指针,分别指向节点、节点的前一个节点和节点的后一个节点。/** * @author yuan * @date 2019/2/12 * @description */public class 反转链表 { static class ListNode { int val; ...原创 2019-02-12 16:16:37 · 183 阅读 · 0 评论 -
剑指offer 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。最简单的思路:两次遍历,第一次获取链表长度n,第二次遍历n-k+1步即可。只遍历一遍:定义两个指针,第一个指针走k-1步,第二个不动,从第k步开始,两个指针同时遍历,当第一个走到链表尾节点,第二个指针正好指向倒数第k个节点。代码:/** * @author yuan * @date 2019/2/12 * @descripti...原创 2019-02-12 11:34:30 · 190 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)例如,求路径和为22:有两条:10->5->7、10->12 由于路径是从根节点开始到叶节点的,要想到是用前序遍历,同时需要记录下当前的路径,当遍历...原创 2019-02-17 11:43:59 · 190 阅读 · 0 评论 -
剑指offer 调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 import java.util.Arrays;/** * @author yuan * @date 2019/2/10 * @description */public class Solu...原创 2019-02-10 13:20:33 · 146 阅读 · 0 评论 -
剑指offer 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 /** * @author yuan * @原创 2019-02-10 12:19:40 · 183 阅读 · 0 评论 -
剑指offer 连续子数组的最大和
题目描述输入一个整形数组,数组中的一个或连续多个整数组成的一个子数组。求所有子数组和的最大值。要求时间复杂度为O(n)。基础的动态规划,以dp(i)表示以i结尾的子数组的最大和,则有:dp(i) = max(dp(i-1)+a[i], a[i]) (i > 0)dp(0) = a[0] 最后对dp数组遍历,求出最大值即为整个数组的子数组和的最大值。/*...原创 2019-02-16 11:00:06 · 143 阅读 · 0 评论 -
剑指offer 字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。例如:"abc"可以先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。然后固定第一个字符,...原创 2019-02-15 12:51:33 · 142 阅读 · 0 评论 -
剑指offer 二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:如果按照中序遍历一个二叉搜索树,则遍历序列为{2,3,4,5,6,7,8}。所有先用中序遍历二叉搜索树,就容易找到第k个节点了。/** * @author yuan * @date 2019/2/21 * @descript...原创 2019-02-21 11:26:42 · 306 阅读 · 0 评论