摘要: 本题重点是记录怎样在“递归遍历中记录前后两个指针” 设一个指针pre,而递归函数的参数就是cur。 pre不为空则执行操作,操作结束了pre = cur(包含了pre为空的情况) 代码: class Solution { public: int ans = INT_MAX; TreeNode* pr 阅读全文
posted @ 2024-11-25 09:52 NeroMegumi 阅读(18) 评论(0) 推荐(0)
摘要: 根据定义递归 class Solution { public: bool dfs(TreeNode* root,long long lower,long long upper){ if(root == nullptr)return true; if(root->val <= lower || roo 阅读全文
posted @ 2024-11-22 11:27 NeroMegumi 阅读(30) 评论(0) 推荐(0)
摘要: 思路 本题难点在于:如何同时遍历两棵二叉树。 方法和遍历一颗二叉树类似,只是同时传入两棵二叉树的节点。 代码 class Solution { public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { if(root1 == n 阅读全文
posted @ 2024-11-22 10:40 NeroMegumi 阅读(41) 评论(0) 推荐(0)
摘要: 递归 最容易想到,采用先序遍历。 1.遍历数组,找出当前区间的最大值; 2.使用该最大值作为根节点; 3.对数组的左半部分和右半部分递归调用构建最大二叉树。 这种方式是标准的 分治法,每次递归都需要遍历当前区间,找到最大值。因此,时间复杂度是 O(n^2),因为每一层递归都会遍历一遍数组,且递归的深 阅读全文
posted @ 2024-11-21 15:18 NeroMegumi 阅读(47) 评论(0) 推荐(0)
摘要: 这两道题目对于递归函数的返回值是不同的,这里进行总结,二叉树遍历中递归函数返回值何时有何时没有。 这里总结如下三点: 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是路径总和ii) 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。 (这种情况我们在2 阅读全文
posted @ 2024-11-13 11:01 NeroMegumi 阅读(20) 评论(0) 推荐(0)
摘要: 自顶向下递归(前序遍历) 这种方法是一开始想到的,虽然ac了但是对于它的本质却不清不楚,不知道时间复杂度,不知道属于前序遍历。 思路 首先得到root节点的左右子树的深度(左右),若深度差绝对值大于1(中),则root为根的树不是平衡二叉树; 否则继续递归root的左右子树,其左右子树都是平衡二叉树 阅读全文
posted @ 2024-11-11 12:20 NeroMegumi 阅读(38) 评论(0) 推荐(0)
摘要: 思路 一、层序遍历,时间复杂度O(n) 二、利用完全二叉树性质,时间复杂度O(logn * logn)(小于O(n)) 完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置 完全二叉树要么1.是满二叉树 2.最后一层没满 满二叉树计算节点数太方便了,直接用公式2 阅读全文
posted @ 2024-11-11 12:02 NeroMegumi 阅读(74) 评论(0) 推荐(0)
摘要: 递归 每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法! 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出 阅读全文
posted @ 2024-11-08 10:50 NeroMegumi 阅读(49) 评论(0) 推荐(0)
摘要: 法一、用数组排序 思路 用map保存元素和频率关系 将元素和频率的键值对pair作为vector的基本元素,以频率为准进行从大到小的排序 —— O(nlogn) 输出前K个pair的first,即数字本身 代码 class Solution { public: std::vector<int> to 阅读全文
posted @ 2024-10-30 11:13 NeroMegumi 阅读(69) 评论(0) 推荐(0)
摘要: 逆波兰表达式 思路 用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中 这里记录string类型相关操作: 判断token是否是数字,不可像char类型用string重载的>=,<=,前者由于用ASCII码表示,后者按字典序比较,例如1<2所以字符串比较 "10" < 阅读全文
posted @ 2024-10-29 10:56 NeroMegumi 阅读(30) 评论(0) 推荐(1)