递归
我不是宸哥
要为真理而斗争
展开
-
JZ36 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数0 \le n \le 10000≤n≤1000,二叉树中每个节点的值0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度O(n)O(n)方法一:中序递归,二叉搜索树的中序遍历正是从大到校排列的顺序,先while循环root->找到要返回的头节点,在全局变量一空节点指针,进行中序遍历,每次将root->left ...原创 2022-04-01 15:04:05 · 313 阅读 · 0 评论 -
JZ35 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。方法一:递归,用一个散哈希表将拷贝的链表与原链表一一对应,递归时用哈希表判断当前节点的拷贝是否已经创建,如果没有创建则创建,如果已经创建,则返回拷贝链表的指针classSolution{public:unordered_map<Node*,Node*>map1;Node*c...原创 2022-04-01 12:17:27 · 833 阅读 · 0 评论 -
JZ34 二叉树中和为某一值的路径(二)
输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n方法一:递归遍历,从根节点遍历到叶子节点class Solution { vector<vector<int>> ans; vector<int>...原创 2022-03-31 17:58:52 · 69 阅读 · 0 评论 -
JZ33 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。数据范围: 节点数量 0 \le n \le 10000≤n≤1000 ,节点上的值满足 1 \le val \le 10^{5}1≤val≤105 ,保证节点上的值各不相同方法一:递归,分治,class Solution {public: bool VerifySquenceOfBST(vector<int> seque..原创 2022-03-31 14:18:33 · 1153 阅读 · 0 评论 -
JZ28 对称的二叉树
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)方法一:递归class Solution {public: bool isduicheng (TreeNode* root1,TreeNode* root2){ if(!root1 && !root2) return true; if(!root1 || !root2) return false; return (root1->val == root2->val)...原创 2022-03-29 15:54:13 · 793 阅读 · 0 评论 -
JZ27 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数0 \le n \le 10000≤n≤1000, 二叉树每个节点的值0\le val \le 10000≤val≤1000要求:空间复杂度O(n)O(n)。本题也有原地操作,即空间复杂度O(1)O(1)的解法,时间复杂度O(n)O(n)方法一:递归,换就完事了class Solution {public: void transfer(TreeNode* pRoot){ TreeN...原创 2022-03-28 15:51:25 · 542 阅读 · 0 评论 -
JZ16 数值的整数次方
实现函数 double Power(double base, int exponent),求base的exponent次方。注意:1.保证base和exponent不同时为0。2.不得使用库函数,同时不需要考虑大数问题3.有特殊判题,不用考虑小数点后面0的位数。方法一:老传统,先暴力来一波(可惜时间太长class Solution {public: double Power(double b, int n) { if (n < 0) { ...原创 2022-03-23 20:43:08 · 2635 阅读 · 0 评论 -
JZ14 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],...,k[m] 。请问 k[1]*k[2]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。数据范围:2 \le n \le 602≤n≤60进阶:空间复杂度O(1)O(1),时间复杂度O(n)O(n)方法一:暴力递...原创 2022-03-22 17:51:35 · 1514 阅读 · 0 评论 -
JZ13 机器人的运动范围
地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当threshold为 18 时,机器人能够进入方格 [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?方法一:深度搜索...原创 2022-03-22 16:41:36 · 78 阅读 · 0 评论 -
JZ12 矩阵中的路径
描述请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。数据范围:0 \le n,m \le 20\0≤n,m≤20,1\le len \le 25\1≤len≤25方法一:深度搜索,递归class Solution {public: bool hasPath(vector<ve...原创 2022-03-22 15:28:16 · 548 阅读 · 0 评论 -
JZ10 斐波那契数列
大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。斐波那契数列是一个满足 fib(x)=\left\{ \begin{array}{rcl} 1 & {x=1,2}\\ fib(x-1)+fib(x-2) &{x>2}\\ \end{array} \right.fib(x)={1fib(x−1)+fib(x−2)x=1,2x>2 的数列数据范围:1\leq n\leq 401≤n≤40要求:空间复杂度 O(1)O(1),时间复原创 2022-03-22 09:34:14 · 76 阅读 · 0 评论 -
JZ8 二叉树的下一个结点
描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示方法一:暴力解法,中序遍历一遍二叉树,把顺序记录在数组中,然后找到指定节点,返回数组中下一个节点即可(有概率时间通不过class Solution {public: void middle(TreeLinkNode* root,vecto...原创 2022-03-22 09:06:53 · 118 阅读 · 0 评论 -
JZ7 重建二叉树
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length ==pre.length2.pre 和 vin均无重复元素3.vin出现的元素均出现在pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围:n \le 2000n≤2000,节点的值-10000 \le val...原创 2022-03-22 08:49:24 · 172 阅读 · 0 评论 -
数据结构每日一题33
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”方法一:递归classSolution{public:TreeNode*ancestor(TreeNode*root,TreeNode*p,TreeNode*q){if(p->val<root->v...原创 2022-03-13 16:45:20 · 66 阅读 · 0 评论 -
数据结构每日一题31
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。方法一:使用递归。使用上界uper,下界lower,递归时将左子树传入递归函数时上界变为根节点的值,将右节点传入递归函数时,下界为根节点的值。classSolution{public:boolisBST(TreeNode*root,longuper,lon...原创 2022-03-13 13:30:59 · 121 阅读 · 0 评论 -
数据结构每日一题29
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。方法一:用中/前/后序遍历一遍树,找到val值相等的root返回即可classSolution{public:TreeNode*ans;TreeNode*searchBST(TreeNode*root,intval){if(root==NULL){...原创 2022-03-12 12:44:23 · 508 阅读 · 0 评论 -
数据结构每日一题27
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。方法一:递归classSolution{public:TreeNode*invertTree(TreeNode*root){if(root==NULL)returnroot;TreeNode*temp=root->left;root->left=root->right;root->rig...原创 2022-03-11 13:30:37 · 140 阅读 · 0 评论 -
数据结构每日一题26
给你一个二叉树的根节点 root , 检查它是否轴对称。方法一:递归。左节点的值等于右节点的值。class Solution {public:bool checksym(TreeNode* p,TreeNode* q){if(p == NULL && q == NULL) return true;if(!p || !q) return false;return p->val == q->val && checksym(p->lef原创 2022-03-11 11:17:19 · 91 阅读 · 0 评论 -
数据结构每日一题25
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。方法一:递归classSolution{public:intmaxDepth(TreeNode*root){if(root==NULL)return0;returnmax(maxDepth(root->left),maxDepth(root->right))+1;}}...原创 2022-03-11 10:34:20 · 57 阅读 · 0 评论 -
数据结构每日一题16
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。方法一:递归classSolution{public:ListNode*removeElements(ListNode*head,intval){if(head==NULL){returnhead;}head->next=remov...原创 2022-03-10 13:59:56 · 145 阅读 · 0 评论 -
数据结构每日一题15
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:先创建一个哑节点,用一个指针始终指着,再创建一个节点pre指向这个哑节点。比较l1和l2的大小,将pre的next指向其中小的那个最后返回哑节点的nextclassSolution{public:ListNode*mergeTwoLists(ListNode*list1,ListNode*list2){if(list1==NULL){...原创 2022-03-09 17:30:05 · 66 阅读 · 0 评论