随笔分类 -  剑指offer

摘要:题目: 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。 从根节点开始往下一直到叶节点所经过的节点形成一条路径。 思路: 在树的前序、中序、后序遍历中,只有前序遍历是首先访问根节点的。 当用前序遍历的方式访问到某一节点时,把该节点添加到路径上,并累加该节点的值。 如果该节点为 阅读全文
posted @ 2019-08-11 11:10 HarSong13 阅读(198) 评论(0) 推荐(0)
摘要:题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是则返回true,否则返回false 思路: 后序遍历的特点,最后一个数字为树的根节点的值,数组中前边的数字可以分为两部分,第一部分是左子树的值,都比根节点小,第二部分都是右子树的值,都比根节点大 代码: 阅读全文
posted @ 2019-08-10 20:40 HarSong13 阅读(158) 评论(0) 推荐(0)
摘要:题目: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印 思路: 每一次打印一个节点的时候,如果该节点有子节点,则把字节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的操作,直到队列中所有的节点都打印出来 代码实现: 阅读全文
posted @ 2019-08-10 15:49 HarSong13 阅读(126) 评论(0) 推荐(0)
摘要:题目: 输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 思路: 引入辅助栈 代码实现: 阅读全文
posted @ 2019-08-10 15:15 HarSong13 阅读(135) 评论(0) 推荐(0)
摘要:题目: 定义栈的数据结构,在该类型中实现一个能够找到栈的最小数的min函数,在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)都保存起来放到另外一个辅助栈里。 如果每次都把最小元素压入辅助栈,那么就能保存辅助栈的栈顶 阅读全文
posted @ 2019-08-10 10:23 HarSong13 阅读(185) 评论(0) 推荐(0)
摘要:题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 思路: 把打印一圈分为四步:第一步从左往右打印一行,第二步从上到下打印一行,第三步从右向左打印一行,第四步从下到上打印一行,每一步根据起始坐标和终止坐标用一个循环就能打印出一行或者一列。 最后一圈有可能退化成只有一行、只有一列、甚 阅读全文
posted @ 2019-08-10 09:49 HarSong13 阅读(233) 评论(0) 推荐(0)
摘要:题目: 输入一个函数,输入一个二叉树,该函数输出它的镜像 代码: 阅读全文
posted @ 2019-08-10 08:57 HarSong13 阅读(154) 评论(0) 推荐(0)
摘要:题目: 输入两棵二叉树A和B,判断B是不是A的子结构 思路: 分为两步: (1)在树A中找到和B的根节点的值一样的节点R (2)判断树A中以R为根节点的子树是不是包含和树B一样的结构 阅读全文
posted @ 2019-08-09 21:45 HarSong13 阅读(172) 评论(0) 推荐(0)
摘要:题目: 输入两个递增序列的链表,合并这两个链表并使新链表中的节点仍然为按照递增顺序的。 思路: (1)定义一个指向新链表的指针,暂且让它指向NULL (2)比较两个链表的头节点,让较小的头节点作为新链表的头节点 (3)a:循环比较两个链表的其余节点,让较小的节点作为上一新节点的后一个节点。直到有一个 阅读全文
posted @ 2019-08-09 21:16 HarSong13 阅读(216) 评论(0) 推荐(0)
摘要:题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点 思路: (1)保存当前节点的下一个节点 (2)将当前节点的next指向反转,指向上一个节点 (3)更新pre为当前节点 (4)将当前节点改为下一个节点 代码实现: 阅读全文
posted @ 2019-08-09 15:35 HarSong13 阅读(224) 评论(0) 推荐(0)
摘要:题目: 输入一个链表,输出该链表中倒数第k个节点。 从1开始技术,即链表的尾节点为倒数第1个节点 思路: 倒数第1个节点和倒数第k个节点相距k - 1个节点,设定两个指针,让第1个指针先走k-1步,第2个指针再同时移动,当第1个指针走到了末尾,则第2个指针走到了倒数第k个节点 代码实现: 阅读全文
posted @ 2019-08-09 15:26 HarSong13 阅读(159) 评论(0) 推荐(0)
摘要:题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 思路: 维护两个指针,一个指向第一个数,从前往后遍历,另一个指向最后一个数,从后往前遍历,遇到偶数和奇数分别停下,交换位置,然后继续下一次 (类似于快排的第一步) 阅读全文
posted @ 2019-08-09 15:07 HarSong13 阅读(143) 评论(0) 推荐(0)
摘要:题目:在O(1)时间删除链表节点 给定单向链表的一个头指针和节点指针,定义一个函数在O(1)时间删除该节点 阅读全文
posted @ 2019-08-09 10:22 HarSong13 阅读(105) 评论(0) 推荐(0)
摘要:题目: 输入数字n,按顺序打印出从1到n位最大十进制数的数值。比如输入3,则打印出1、2、3一直到最大三位数999 阅读全文
posted @ 2019-08-09 10:02 HarSong13 阅读(124) 评论(0) 推荐(0)
摘要:题目: 斐波那契数列,输入n,求斐波那契数列的第n项值 F0=0,F1=1,F2 = 1,... , Fn = Fn-1 + Fn-2 思路: 循环 代码实现: 阅读全文
posted @ 2019-08-09 09:14 HarSong13 阅读(214) 评论(0) 推荐(0)
摘要:题目: 把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1 思路:二分查找 取两个指针low和high分别指向arr的第一个值和最后一个值,mid 阅读全文
posted @ 2019-08-09 09:02 HarSong13 阅读(180) 评论(0) 推荐(0)
摘要:题目: 用两个栈实现一个队列。队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。 思路: 栈1用于存储元素,栈2用于弹出元素,负负得正 代码实现: 阅读全文
posted @ 2019-08-08 23:53 HarSong13 阅读(199) 评论(0) 推荐(0)
摘要:题目: 输入某二叉树的前序遍历和中序遍历的结果,请重构出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。 例如: 前序遍历序列{1,2,4,7,3,5,6,8} 中序遍历序列{4,7,2,1,5,3,8,6} 重建二叉树并输出它的头节点 思路: 1.由前序遍历的第一个节点可知根节点为1 阅读全文
posted @ 2019-08-08 23:15 HarSong13 阅读(169) 评论(0) 推荐(0)
摘要:题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值 将链表从头到尾压入栈内,出栈的过程就对应着从尾到头 阅读全文
posted @ 2019-06-10 22:19 HarSong13 阅读(202) 评论(0) 推荐(0)
摘要:题目:请实现一个函数,把字符串中的每个空格替换为"%20",例如“We are happy.”,则输出:"We%20are%20happy." 阅读全文
posted @ 2019-06-10 22:04 HarSong13 阅读(156) 评论(0) 推荐(0)