随笔分类 - 基础递归
在快速排序以及树结构的遍历中需要使用到的基础递归
摘要:剑指 Offer 12. 矩阵中的路径 题目链接 题目类似于迷宫的搜索。 需要注意的是,需要首先判断起始搜索的位置,可能有多个起点,都需要一一尝试。 每轮迭代的时候记得将是否遍历标记数组还原为未遍历的状态。 package com.walegarrett.offer; /** * @Author W
阅读全文
摘要:包子凑数 "PREV 36" 这题首先需要知道不定方程的一些性质,即:ax+by=c的解的情况: 如果a,b互质,则一定有解且由无穷多个。若限制x,y =0,则ax+by=c有可能有负数解,即存在有限个c使得方程无正数解。且存在max{c|使方程无解的c}=a b a b; 如果a,b不互质,则可能
阅读全文
摘要:正则表达式 "PREV 35" 首先看到题目的要求是求解最长的字符串,一看到最长应该想到一般是使用深度优先搜索和动态规划。 本题中求解的是正则表达式,因为符号只有四种,而且括号可以嵌套,所以我们可以从递归的角度求解最长的长度。 当遇到的字符是左括号时,这个时候应该继续递归以等待右括号的出现,当遇到的
阅读全文
摘要:在受污染的二叉树中查找元素 "LeetCode 1261"
阅读全文
摘要:二叉搜索树的第k大节点 "LeetCode 面试题54" 需要充分了解二叉搜索树的性质. 利用中序遍历的思想,采用相反的思想:先遍历右节点再遍历左节点。
阅读全文
摘要:重建二叉树 "LeetCode 105" 首次需要知道前序遍历和中序遍历的性质。 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建。 本题的难点就是如何在前序遍历中找到左右子树的范围以分别重构,这可以根据中序遍历中的左右子树的数量来分辨。使
阅读全文
摘要:二叉搜索树的范围和 "LeetCode 938" 1. 首先需要仔细理解题目的意思:找出所有节点值在L和R之间的数的和。 2. 这里采用递归来完成,主要需要注意二叉搜索树的性质。
阅读全文
摘要:祖父节点值为偶数的结点值之和 "LeetCode 1315" 这题稍微难度有点大,但是仔细思考还是可以找到思路的。 因为只需要找到祖父节点这最上两层,所以可以带一个参数记录一下祖父节点是否是偶数,以及父节点是否是偶数。 求解的时候还需要注意本身结点是否是偶数,这个时候再改变参数的值。
阅读全文
摘要:层数最深叶子结点的和 "LeetCode 1302" 这里可以采用上一题中求解二叉树的深度的方法。 因为需要记录最深结点的值的和,所以这里可以边求和,如果遇到不符合最深结点时再将和sum=0.
阅读全文
摘要:二叉树的深度 "二叉树的深度" 使用递归求解二叉树的深度。 需要注意使用的临界条件。
阅读全文
摘要:#对称二叉树 ##symmetric tree 和上一题的镜像树很相似,这里是判断是否是对称树,需要利用镜像树的性质。 对称树满足两个性质: 2.1. 两个子树的结点值需要相同。 2.2. 第一颗树的左子树和第二课树的右子树也满足这种对称树的关系(结点值相同)。 使用递归求解较容易想到,还可以使用迭
阅读全文
摘要:二叉树的镜像 "二叉树的镜像" 1. 给定一个二叉树,输出二叉树的镜像。 2. 只需要使用一个简单的递归,分别对左右子树反转后再对当前结点进行反转。
阅读全文
摘要:快速排序 "LanQiao 297" include include include include using namespace std; //每一趟返回一个数的确定位置 int onePart(int a,int i,int j){ int orig=a[i]; while(i=orig;k
阅读全文