数据结构
lMonster81
淡泊以明志,宁静以致远
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode199. Binary Tree Right Side View二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 先求深度,中序遍历或者前序遍历都可以 class Solution {public: vector<int> v; vector<int>...原创 2018-12-01 21:12:16 · 246 阅读 · 0 评论 -
Leetcode109. Convert Sorted List to Binary Search Tree有序链表转换二叉搜索树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9], 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 ...原创 2018-11-26 20:58:15 · 165 阅读 · 0 评论 -
Leetcode150. Evaluate Reverse Polish Notation逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"] 输出: 9 解释: ((2 + 1) * 3) = 9示例 ...原创 2018-11-29 22:19:31 · 240 阅读 · 0 评论 -
Leetcode147. Insertion Sort List对链表进行插入排序
对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入...原创 2018-11-29 22:42:17 · 149 阅读 · 0 评论 -
Leetcode144. Binary Tree Preorder Traversal二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归:class Solution {public: vector<int> res; vector<int> preorderTraversal(...原创 2018-11-29 22:46:08 · 186 阅读 · 0 评论 -
Leetcode142. Linked List Cycle II环形链表2
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题? 方法一:使用map方法二:分两个步骤,首先通过快慢指针的方法判断链表是否有环;如果有环,则寻找入环的第一个节点。具体的方法为,首先假定链表起点到入环的第一个节点A的长度为a,到快慢指针相遇的节点B的长度为(a + b)。...原创 2018-11-29 22:48:12 · 183 阅读 · 0 评论 -
Leetcode138. Copy List with Random Pointer复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 方法一:class Solution {public: RandomListNode *copyRandomList(RandomListNode *head) { if(head == NULL) ...原创 2018-11-29 23:58:48 · 179 阅读 · 0 评论 -
Leetcode513. Find Bottom Left Tree Value找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入: 2 / \ 1 3 输出: 1 示例 2:输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假设树(即给定的根节点)不为 NULL。 class Solution {public: int maxDepth; int res; in...原创 2018-12-04 20:32:49 · 188 阅读 · 0 评论 -
Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9] class Solution {public: vector<int> largestValues(TreeNode* root) { vector<int> res; if(r...原创 2018-12-04 20:34:27 · 159 阅读 · 0 评论 -
Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归:class Solution {public: vector<int> res; vector<int> postorderTraversal(TreeNode* root) { if(root == NULL) ...原创 2018-12-04 20:35:54 · 174 阅读 · 0 评论 -
二叉树三种遍历两种方法(递归和迭代)
树结构的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};前序遍历:递归:class Solution {public: vector<i...原创 2018-12-04 20:59:57 · 476 阅读 · 1 评论 -
Leetcode113. Path Sum II路径总和2
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2], [5,8,4,5] ] class Solution {pub...原创 2018-11-27 22:10:11 · 218 阅读 · 0 评论 -
Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
给定一个二叉树,原地将它展开为链表。例如,给定二叉树1 / \ 2 5 / \ \ 3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6 class Solution {public:TreeNode *last = NULL; void flatten(TreeNode* root) { if(root == ...原创 2018-11-27 22:11:02 · 154 阅读 · 0 评论 -
Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说明:你只能使用额...原创 2018-11-27 22:11:56 · 195 阅读 · 0 评论 -
Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3 输出: 25 解释: 从根到叶子节点路径 1->2 代表数字 12. 从根到...原创 2018-11-27 22:12:37 · 230 阅读 · 0 评论 -
Leetcode173. Binary Search Tree Iterator二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。 二叉树的中序遍历class BSTIterator {public: stack<TreeNode*> s;...原创 2018-12-01 21:11:26 · 178 阅读 · 0 评论 -
Leetcode106. Construct Binary Tree from Inorder and Postorder Traversal中序后续构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3 / \ 9 20 / \ 15 7 class Solution {public: TreeNode* buildTr...原创 2018-11-26 20:57:49 · 171 阅读 · 0 评论 -
Leetcode946. Validate Stack Sequences验证栈序列
给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3), push...原创 2018-12-17 16:41:46 · 378 阅读 · 0 评论 -
Leetcode95. Unique Binary Search Trees II不同的二叉搜索树2
给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。示例:输入: 3输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] 重建树一般都是递归求解class Solution {public: vector&l...原创 2018-12-11 19:44:44 · 209 阅读 · 0 评论 -
Leetcode965. Univalued Binary Tree单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1:输入:[1,1,1,1,1,null,1] 输出:true示例 2:输入:[2,2,2,5,2] 输出:false 提示:给定树的节点数范围是 [1, 100]。 每个节点的值都是整数,范围为 [0, 9...原创 2019-01-03 21:18:19 · 388 阅读 · 0 评论 -
Leetcode938. Range Sum of BST二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。 示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15 输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10 输出:23 提示:树中...原创 2018-12-31 20:37:03 · 184 阅读 · 0 评论 -
Leetcode951. Flip Equivalent Binary Trees翻转等价二叉树
我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。编写一个判断两个二叉树是否是翻转等价的函数。这些树由根节点 root1 和 root2 给出。 示例:输入:root1 = [1,2,3,4,5,6,null,null,null,7,8], ro...原创 2018-12-31 20:38:31 · 262 阅读 · 0 评论 -
Leetcode950. Reveal Cards In Increasing Order按递增顺序显示卡牌
牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。 如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。 如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。返回能以递增顺序显示卡牌的牌组顺序...原创 2018-12-25 22:47:12 · 344 阅读 · 0 评论 -
Leetcode958. Check Completeness of a Binary Tree二叉树的完全验证性
给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。) 示例 1:输入:[1,2,3,4,5,6] 输出:true 解释:最后一层前的每一层都是满的(即...原创 2019-01-01 22:05:54 · 432 阅读 · 0 评论 -
Leetcode92. Reverse Linked List II反转链表
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 把从m到n的反转,然后再接上去。 class Solution {...原创 2019-01-12 10:59:11 · 176 阅读 · 0 评论 -
Leetcode143. Reorder List重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新...原创 2019-01-12 11:01:28 · 247 阅读 · 0 评论 -
Leetcode208. Implement Trie (Prefix Tree)实现Trie(前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"); // 返...原创 2019-01-17 17:25:12 · 260 阅读 · 0 评论 -
Leetcode211. Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
设计一个支持以下两种操作的数据结构:void addWord(word) bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。示例:addWord("bad") addWord("dad") addWord("mad") search("pad") -> false sea...原创 2019-01-17 17:25:59 · 290 阅读 · 0 评论 -
Leetcode148. Sort List排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3 输出: 1->2->3->4示例 2:输入: -1->5->3->4->0 输出: -1->0->3->4->5 不推荐: class Solution { pub原创 2019-01-13 19:26:46 · 199 阅读 · 0 评论 -
Leetcode284. Peeking Iterator顶端迭代器
给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 -- 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。示例:假设迭代器被初始化为列表 [1,2,3]。 调用 next() 返回 1,得到列表中的第一个元素。 现在调用 peek() 返回 2,下一个元素。在此之后调用 next() ...原创 2019-02-25 22:05:03 · 270 阅读 · 0 评论 -
Leetcode 295. 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:add...原创 2019-03-21 19:29:25 · 314 阅读 · 0 评论 -
七大排序总结
图片来自:https://www.cnblogs.com/DswCnblog/p/5629165.html七大排序中只有冒泡,归并,插入是稳定排序。代码实现:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include...原创 2019-03-04 19:44:36 · 276 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 递归,其左右子树也都为平衡二叉树 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};cl...原创 2018-10-08 23:04:56 · 187 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解:按照顺序压入辅助栈,如果栈顶与给出的出栈顺序的相同,则出栈一直到不相...原创 2018-10-04 00:00:00 · 153 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 注意:不一定子结构B在A中一定是包含叶子节点的,有可能也是中间那部分,所以刚开始的判断条件出错。 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(i...原创 2018-10-04 01:07:34 · 189 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解:根据后序遍历的特征,和二叉搜索树的特性(左边的任何节点比根节点小,右边的任何节点比根节点大),只要找到根节点,然后找出左子数和右子树的遍历顺序,左子数和右子树也是二叉搜索树,再进行判断和递归。就可以得出解。 class S...原创 2018-10-04 01:29:16 · 148 阅读 · 0 评论 -
复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) (图片来自牛客) *解题思路:1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面;2、重新遍历链表,...原创 2018-10-04 20:57:37 · 181 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解题思路:1.将左子树构造成双链表,并返回链表头节点。2.定位至左子树双链表最后一个节点。3.如果左子树链表不为空的话,将当前root追加到左子树链表。4.将右子树构造成双链表,并返回链表头节点。5.如果右子树链表不为空的话,将该链表追加到...原创 2018-10-04 22:32:40 · 280 阅读 · 1 评论 -
已知前序或后续遍历和中序遍历重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。struct TreeNode { int val; TreeNode *left; TreeNode *...原创 2018-09-28 13:01:17 · 423 阅读 · 0 评论 -
从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 相当于BFSclass Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; queue<TreeNode*> tree;...原创 2018-09-25 13:29:12 · 198 阅读 · 0 评论
分享