递归
种子选手席同学
这个作者很懒,什么都没留下…
展开
-
[剑指offer] 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路我们知道,前序遍历的第一个节点就是树的根节点,所以我们先根据前序遍历序列的第一个数字创建根结点,接下来在中序遍历序列中找到根结点的位置,根节点...原创 2019-02-28 17:04:12 · 110 阅读 · 0 评论 -
[剑指offer] 二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路用前序遍历的方式访问到某一结点时,把该结点添加到路径上,并用目标值减去该节点的值。如果该结点为叶结点并且目标值减去该节点的值刚好为0,则当前的路径符合要求,我们把加入res数组中。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问...原创 2019-03-04 15:13:08 · 82 阅读 · 0 评论 -
[剑指offer] 二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \5 7 9 11镜像二叉树 8 / \ 10 6 / \ / \11 9 7 5解题思路通过对以上两棵树的观察,我们可以总结出这两棵树的根节点相同,但它们的左、右两个子节点交换了位置。所以我...原创 2019-03-02 19:20:37 · 103 阅读 · 0 评论 -
[剑指offer] 树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路递归思想,如果根节点相同则递归调用IsSubtree(),如果根节点不相同,则判断root1的左子树和roo2是否相同,再判断右子树和root2是否相同;注意节点为空的条件,HasSubTree中,只要有树为空就返回false; IsSubtree中,要先判断root2,如果root2...原创 2019-03-02 18:31:00 · 133 阅读 · 0 评论 -
[剑指offer] 合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路两种解法:递归和非递归参考代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*//...原创 2019-03-02 17:00:37 · 71 阅读 · 0 评论 -
递归实现全排列问题
目录描述思路代码输出正文描述问题是有一组数R,需要输出它的全排列。R的递归可定义如下:当个数n为1时,Perm® = ®,其中r是集合R中唯一的元素当个数n大于1时,Perm®由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3),…,(rn)Perm(Rn)构成其中Ri = R - {ri} 即该集合中减去对应元素思路其实说直白点,就是递归地把...转载 2019-03-05 09:51:54 · 6078 阅读 · 2 评论 -
[剑指offer] 二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路题目可能比较难理解,可以看如下的图,我们有一棵二叉搜索树,要求得右边的双向链表。在二叉搜索树中,左子结点的值总是小于父结点的值,右子节点的值总是大于父结点的值。因此我们在转换成排序双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子...原创 2019-03-04 22:16:32 · 120 阅读 · 0 评论 -
[剑指offer] 数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路指数为负时,可以先对指数求绝对值,算出次方的结果后再取倒数当底数为0,指数为负时,会出现对0求倒数情况,要特殊处理0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的在计算次方的时候,除了简单的遍历,我们可以使用递归的思想,如下公式,来...原创 2019-03-01 11:27:47 · 106 阅读 · 0 评论 -
剑指offer:矩形覆盖
题目表述:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路当n=1时,记作F(1), 共有1种方法;当n=2时,记作F(2), 共有两种方法;当n=3时,记作F(3), 分为两种情况:第一次用一个矩形竖着覆盖(左图蓝色),则剩下共有F(n-1)种方法,即F(2) 种方法;第一次用一个矩形横着覆盖(右图...原创 2019-03-01 10:15:55 · 127 阅读 · 0 评论 -
剑指offer—变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳是在前一次跳的结果上累加的,因此我们可以考虑使用递归的方法来解决问题。 那么从递归的三个步骤开始寻找解决方案: 1. 递归截止条件。 由于每次可以跳1-n的任意阶数,因此无论有多少...原创 2019-02-28 22:59:23 · 79 阅读 · 0 评论 -
递归中的return
一、一层一层返回return:从被调用函数返回到主调函数中继续执行,并非一遇到return整个递归结束。二、对于又返回值得函数递归调用必须要有return下面举例说明:int BinarySearchRecursion(int arry[],int value,int start,int end){ if(start > end) return -1; ...原创 2019-03-04 16:15:38 · 17893 阅读 · 6 评论