剑指Offer刷题(十六):合并两个排序的链表
题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路
由于两个链表已经排号序了,因此只要比较两个链表里的大小再串起来即可,这是我最一开始想到的方法.问题就是代码书写起来比较复杂
网上看到的方法是,将其视为一种分而治之的问题.两个序列的子序列们可以视为子问题.递归的调用问题.
C++
1 |
|
剑指Offer刷题(十七):树的子结构
题目
输入两颗二叉树A,B,判断B是不是A的子结构。(PS:我们约定空树不是任意一个树的子结构)。
思路
判断B是不是A的子树,很显然,我们首先需要找到A中与B的根节点相同的节点.然后再看他的子树是不是和B一样.由于树的特点就是递归,所以整个判断过程也是递归的。
代码分为两部分
- 在A中找与B的根节点匹配的节点
- 查看子结构是否匹配
C++
1 |
|
剑指Offer刷题(十八):二叉树的镜像
题目
操作给定的二叉树,将其变换为源二叉树的镜像。
思路
树的问题,我们可以考虑一下用递归的方式,因为树的构建就是以递归的方式构建的.
C++
1 |
|
剑指Offer刷题(十九):顺时针打印矩阵
题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
则依次打印出数组:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
思路
按正常逻辑操作
C++
1 |
|
剑指Offer刷题(二十):包含min函数的栈
题目
定义栈的数据结构,请在类型中实现一个能够得到栈最小元素的min函数。
思路
一开始的想法是设置一个tag来标记最小值,但之后会发现这样能统计进到栈里的元素里的最小值,但是一旦这个最小值离开了栈,我们怎么知道下一个小的是什么呢.而网上较好的方法是同样设置一个min的最小栈来起作用
C++
1 |
|