剑指offer66题
每天一题,尽量坚持!
狗焕sama
这个作者很懒,什么都没留下…
展开
-
22.从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 我的解法:没做出来哇。。以为递归可以的,但是递归只能实现前序和后序遍历这种的。 正确解法:使用bfs,因为队列先进先出原则,我们先压左节点,再压右节点,即可实现当左子树的右节点遍历完后回到父节点的右节点。 import java.util.ArrayList; import java.util.*; /** public class...原创 2020-03-01 01:15:43 · 69 阅读 · 0 评论 -
18.二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 终于过了hhhhh,跟正确解法可以说是差不多。(其实题也很水hhhh) 类似于前序遍历的代码,创建一个树为当前根节点的左节点(或者右节点)。 然后让根节点的左节点和右节...原创 2020-02-24 01:34:12 · 75 阅读 · 0 评论 -
17.树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 没解出来。。。解出题目还是太少了啊! 正确解法:用递归去做 1.参考博客[https://www.cnblogs.com/lishanlei/p/10707732.html里面讲的更详细,然后看完了再看牛客解法。根据思路,自己修改了一下也过了,也算理解了吧。 public class Soluti...原创 2020-02-24 00:54:51 · 76 阅读 · 0 评论 -
16.合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 没做出来,花了半天搜索链表的概念,一开始以为自己又理解错了。。。。 正确解法: 根据ListNode是引用类型的特性 /* public class ListNode { int val; ListNode next = null; ListNode(int val) ...原创 2020-02-22 20:15:20 · 76 阅读 · 0 评论 -
15.反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头。 题目看起来很简单,其实也确实简单,但是我就是想不出来。。。。 正确解法: 1.保存当前节点的next节点 2.修改当前节点next节点为pre(初值为null,因为反转后第一个节点的next节点为null) 3.将当前节点存进pre 4.进入next节点并循环 注意:循环结束后,还需要再赋一次值,因为在倒数第二个节点的next修改后,循环就终...原创 2020-02-21 00:04:13 · 80 阅读 · 0 评论 -
14.链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 没做出来。。。想着是先算出全部节点数p,再p - k + 1再遍历,不知道怎么不行 正确解法(搬运) public ListNode FindKthToTail(ListNode head,int k) { ListNode p = head; //相当于先过滤掉倒数后面的数 while(k-- ...原创 2020-02-20 22:17:27 · 57 阅读 · 0 评论 -
9.变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 这题我也是没想出来怎么写递归。。。根据f(n) = f(n - 1) + f(n - 2) + … + f(1)和 f(n - 1) = f(n - 2) + f(n - 3) + … + f(1); 得出f(n) = 2 * f(n - 1); 正确解法: 关于本题,前提是n...原创 2020-02-13 22:02:21 · 60 阅读 · 0 评论 -
8.跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 知道用递归做,但是不知道怎么写递归。说明递归基础是真的差啊。。。而且这个题跟斐波那契数列是一样的方法。 正确解法: public class Solution { public int ans = 0; public int JumpFloor(int ...原创 2020-02-12 20:31:13 · 157 阅读 · 0 评论 -
7.斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 我的解法: 使用递归实现。复杂度很高 public class Solution { public int Fibonacci(int n) { int a[] = new int[200]; a[0] = 0; ...原创 2020-02-11 16:30:46 · 102 阅读 · 0 评论 -
6.旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 我的解法:暴力法,直接找最小数,虽然很low,但是我实在没搞懂这个题目的规律 import java.util...原创 2020-02-11 00:07:12 · 122 阅读 · 0 评论 -
5.用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 我的解法(错误,没有考虑到当stack1压完给stack2的时候还可能继续有东西压入stack1.) import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Inte...原创 2020-02-10 08:40:56 · 75 阅读 · 0 评论 -
4.重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 这题,也是不会做,第一是不知道二叉树前中后序遍历的原理,第二是递归思想还是太弱了。。 官方解法: 前序遍历:根节点->左子树->右子树 中序...原创 2020-02-08 18:04:56 · 126 阅读 · 0 评论 -
3.从尾到头打印链表
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 这题不会做。对链表概念不熟悉 官方解法1:递归 import java.util.ArrayList; public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public Array...原创 2020-02-07 14:04:33 · 77 阅读 · 0 评论