![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自我陶醉
碎花喵
这个作者很懒,什么都没留下…
展开
-
二叉搜索树中的众数(1.我用占空间坐的,而且针对所有二叉树。技术包括map放到vector中排序等2.我最喜欢的有序重复边走边找3.直接在dfs过程中拿值(第3种要二刷))
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2],返回[2].提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)/** * Definition for a binary tree node原创 2021-07-26 16:06:44 · 112 阅读 · 0 评论 -
二叉树的所有路径(自己想的回溯解决,通常说用dfs一样)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} *原创 2021-07-26 14:14:19 · 186 阅读 · 0 评论 -
平衡二叉树的判断(哈哈哈哈自己写的,cool,先写一次的条件,不直接返回true再直接返回往下的)
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 1原创 2021-07-26 13:44:23 · 130 阅读 · 0 评论 -
2021-07-26
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。提示原创 2021-07-26 11:37:02 · 78 阅读 · 0 评论 -
左叶子之和(按之前的规律三个节点不能完全解决的情况下再加,想了一下一遍过,绝绝子)
计算给定二叉树的所有左叶子之和。示例:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr),原创 2021-07-26 11:21:03 · 62 阅读 · 0 评论 -
路径总和(一遍过,稍微想一下即可)
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出:false示例 3:输入:root = [原创 2021-07-21 17:32:52 · 70 阅读 · 0 评论 -
数组中的第K个最大元素(快排和堆排两种递归方式实现)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。①快排。写出快排后再修改,一次过。class Solution {public: int findKthLargest(vec.原创 2021-06-10 11:24:50 · 209 阅读 · 0 评论 -
用两个栈实现队列(留存,自己过,注意把2出完再说)
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。自己过,背:class Solution{public: void push(int node) { stack1.push(node); } int pop() { int res; if(stack2.empty()) { while(!stack1.empty())原创 2021-04-07 17:14:09 · 59 阅读 · 0 评论 -
两个链表的第一个公共节点(理解之后自写,简洁,一遍过)
题目描述输入两个链表,找出它们的第一个公共结点。解题思路:设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。非常简洁:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNo原创 2021-04-06 20:17:11 · 82 阅读 · 0 评论 -
反转链表(更新我更喜欢的命名方法)
题目描述输入一个链表,反转链表后,输出新链表的表头。示例1输入复制{1,2,3}返回值复制{3,2,1}/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) {原创 2021-04-06 20:01:33 · 104 阅读 · 0 评论 -
链表中环的入口节点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。分为两步:①如何判断有环的存在?在追及问题中,我们可以用两个速度不同的物体从同一地点出发,如果相遇则证明存在环(可用反证法证明,若不存在环,则速度不同的物体从同一地点出发则一定不会相遇),因此可以类比过来,定义两个指针fast、slow,令两指针以不同速度向后指,则相遇时证明有环存在,若fast指向NULL,则不存在环。②怎么找到环的入口结点?首先说方法:在问题一中两指针相遇后,让一个指针从头结点开始,另一原创 2021-04-06 19:34:36 · 117 阅读 · 0 评论 -
平衡二叉树的判断(一路做下来一遍过,用到前面判断二叉树高度的一句递归)
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。示例1输入复制{1,2,3,4,5,6,7}返回值复制true自写法,一遍过:class Solution {public: bool IsBalanced_Solutio原创 2021-04-04 20:11:08 · 103 阅读 · 0 评论 -
【经典】二叉树深度(一句话)
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入复制{1,2,3,4,5,#,6,#,#,7}返回值复制4(我)①想到层次遍历,每进入一层就count++,代码长。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v.原创 2021-04-04 19:45:18 · 70 阅读 · 0 评论 -
二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。示例1输入复制{5,3,7,2,4,6,8},3返回值复制{4}说明按结点数值大小顺序第三小结点的值为4 ①我写的需要多一个内存的:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : va原创 2021-04-04 19:15:13 · 87 阅读 · 0 评论 -
从上往下打印二叉树(BFS一遍过)
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入复制{5,4,#,3,#,2,#,1}返回值复制[5,4,3,2,1]/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub原创 2021-04-04 11:32:50 · 156 阅读 · 0 评论 -
二叉树的镜像(简单。观察镜像即左右子树都交换)
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5自己一遍过:/*struct TreeNode { int val; struct TreeNod原创 2021-04-02 11:36:12 · 158 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入复制{8,8,#,9,#,2,#,5},{8,9,#,2}返回值复制true淘汰:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }原创 2021-04-01 22:37:36 · 57 阅读 · 0 评论 -
(非常标准,且一次过)二叉树变形问题
最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 / \ 3 5 \ / 2 0 ...原创 2020-10-28 13:14:58 · 143 阅读 · 0 评论 -
相同的树(二叉树的递归太喜欢啦)(自己写,我又可以了!)
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2...原创 2020-10-21 21:41:33 · 68 阅读 · 0 评论 -
合并二叉树(哇我终于自己快速写出树的递归了!!感动)
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2 ...原创 2020-10-16 20:09:19 · 289 阅读 · 0 评论