11 2024 档案

摘要:递归 最近公共祖先定义:设节点 root 为节点 p,q 的某公共祖先,若其左子节点 root.left 和右子节点root.right 都不是 p,q 的公共祖先,则称 root 是“最近的公共祖先”。 若 root是 p,q的 最近公共祖先 ,则只可能为以下情况之一 如果p和q在节点root的两 阅读全文
posted @ 2024-11-26 10:36 NeroMegumi 阅读(22) 评论(0) 推荐(0) 编辑
摘要:思路 利用二叉搜索树性质,先序遍历是递增序列 加上进阶要求,问题转换为:对于一个递增序列,在时间复杂度O(N),空间复杂度O(1)内找到所有的众数 由于是递增序列,因此众数一定是挨在一起的。遍历序列时判断前后两个数是否相同来增加该数出现次数。(初始化次数为1) 利用上一题的“记录前后两个节点”的操作 阅读全文
posted @ 2024-11-25 10:32 NeroMegumi 阅读(13) 评论(0) 推荐(0) 编辑
摘要:本题重点是记录怎样在“递归遍历中记录前后两个指针” 设一个指针pre,而递归函数的参数就是cur。 pre不为空则执行操作,操作结束了pre = cur(包含了pre为空的情况) 代码: class Solution { public: int ans = INT_MAX; TreeNode* pr 阅读全文
posted @ 2024-11-25 09:52 NeroMegumi 阅读(5) 评论(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 阅读(12) 评论(0) 推荐(0) 编辑
摘要:思路 本题难点在于:如何同时遍历两棵二叉树。 方法和遍历一颗二叉树类似,只是同时传入两棵二叉树的节点。 代码 class Solution { public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { if(root1 == n 阅读全文
posted @ 2024-11-22 10:40 NeroMegumi 阅读(9) 评论(0) 推荐(0) 编辑
摘要:递归 最容易想到,采用先序遍历。 1.遍历数组,找出当前区间的最大值; 2.使用该最大值作为根节点; 3.对数组的左半部分和右半部分递归调用构建最大二叉树。 这种方式是标准的 分治法,每次递归都需要遍历当前区间,找到最大值。因此,时间复杂度是 O(n^2),因为每一层递归都会遍历一遍数组,且递归的深 阅读全文
posted @ 2024-11-21 15:18 NeroMegumi 阅读(9) 评论(0) 推荐(0) 编辑
摘要:这两道题目对于递归函数的返回值是不同的,这里进行总结,二叉树遍历中递归函数返回值何时有何时没有。 这里总结如下三点: 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是路径总和ii) 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。 (这种情况我们在2 阅读全文
posted @ 2024-11-13 11:01 NeroMegumi 阅读(6) 评论(0) 推荐(0) 编辑
摘要:自顶向下递归(前序遍历) 这种方法是一开始想到的,虽然ac了但是对于它的本质却不清不楚,不知道时间复杂度,不知道属于前序遍历。 思路 首先得到root节点的左右子树的深度(左右),若深度差绝对值大于1(中),则root为根的树不是平衡二叉树; 否则继续递归root的左右子树,其左右子树都是平衡二叉树 阅读全文
posted @ 2024-11-11 12:20 NeroMegumi 阅读(18) 评论(0) 推荐(0) 编辑
摘要:思路 一、层序遍历,时间复杂度O(n) 二、利用完全二叉树性质,时间复杂度O(logn * logn)(小于O(n)) 完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置 完全二叉树要么1.是满二叉树 2.最后一层没满 满二叉树计算节点数太方便了,直接用公式2 阅读全文
posted @ 2024-11-11 12:02 NeroMegumi 阅读(25) 评论(0) 推荐(0) 编辑
摘要:递归 每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法! 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出 阅读全文
posted @ 2024-11-08 10:50 NeroMegumi 阅读(26) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示