
数据结构
lMonster81
淡泊以明志,宁静以致远
展开
-
七大排序总结
图片来自:https://www.cnblogs.com/DswCnblog/p/5629165.html七大排序中只有冒泡,归并,插入是稳定排序。代码实现:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include...原创 2019-03-04 19:44:36 · 213 阅读 · 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 · 181 阅读 · 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 · 132 阅读 · 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 · 118 阅读 · 0 评论 -
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 · 172 阅读 · 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 · 394 阅读 · 1 评论 -
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 · 127 阅读 · 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 · 115 阅读 · 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 · 137 阅读 · 0 评论 -
Leetcode138. Copy List with Random Pointer复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 方法一:class Solution {public: RandomListNode *copyRandomList(RandomListNode *head) { if(head == NULL) ...原创 2018-11-29 23:58:48 · 145 阅读 · 0 评论 -
Leetcode142. Linked List Cycle II环形链表2
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题? 方法一:使用map方法二:分两个步骤,首先通过快慢指针的方法判断链表是否有环;如果有环,则寻找入环的第一个节点。具体的方法为,首先假定链表起点到入环的第一个节点A的长度为a,到快慢指针相遇的节点B的长度为(a + b)。...原创 2018-11-29 22:48:12 · 143 阅读 · 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 · 152 阅读 · 0 评论 -
Leetcode147. Insertion Sort List对链表进行插入排序
对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入...原创 2018-11-29 22:42:17 · 116 阅读 · 0 评论 -
Leetcode150. Evaluate Reverse Polish Notation逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"] 输出: 9 解释: ((2 + 1) * 3) = 9示例 ...原创 2018-11-29 22:19:31 · 190 阅读 · 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 · 142 阅读 · 0 评论 -
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 · 191 阅读 · 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 · 314 阅读 · 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 · 257 阅读 · 0 评论 -
Leetcode284. Peeking Iterator顶端迭代器
给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 -- 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。示例:假设迭代器被初始化为列表 [1,2,3]。 调用 next() 返回 1,得到列表中的第一个元素。 现在调用 peek() 返回 2,下一个元素。在此之后调用 next() ...原创 2019-02-25 22:05:03 · 220 阅读 · 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 · 168 阅读 · 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 · 227 阅读 · 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 · 191 阅读 · 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 · 202 阅读 · 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 · 135 阅读 · 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 · 366 阅读 · 0 评论 -
Leetcode950. Reveal Cards In Increasing Order按递增顺序显示卡牌
牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。 如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。 如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。返回能以递增顺序显示卡牌的牌组顺序...原创 2018-12-25 22:47:12 · 287 阅读 · 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 · 202 阅读 · 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 · 142 阅读 · 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 · 322 阅读 · 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 · 155 阅读 · 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 · 123 阅读 · 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 · 109 阅读 · 0 评论 -
Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal前序与中序构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3 / \ 9 20 / \ 15 7 class Solution {public: TreeNode* buildTre...原创 2018-11-26 20:57:21 · 111 阅读 · 0 评论 -
链表分割
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 #include<bits/stdc++.h>using namespace std;struct ListNode { int ...原创 2018-09-28 23:37:33 · 166 阅读 · 0 评论 -
访问单个节点的删除
题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 解:把当前把下一个节点的值拷贝到当前节点,然后删除下一个节点。 /*struct ListNode { int val; struct ListNode *next; ListNod...原创 2018-09-28 23:34:32 · 203 阅读 · 0 评论 -
两个栈实现一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解:用两个栈来存储,一个栈存储进队的元素一个栈存储需要出队的元素class Solution{public: void push(int node) { stack1.push(node); } int pop() { ...原创 2018-09-25 12:57:35 · 116 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 注意考虑输入为NULL的情况class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode *last = NULL; ...原创 2018-09-25 13:21:50 · 107 阅读 · 0 评论 -
包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 应用一个辅助栈。压入:如果A栈的压入比B栈顶部元素大,B栈不压。小于等于:AB栈同时压入。出栈:如果AB栈顶元素不等,A出,B不出。 class Solution {public: stack<int> s1; stack<int...原创 2018-09-25 13:27:11 · 216 阅读 · 0 评论 -
从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 相当于BFSclass Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; queue<TreeNode*> tree;...原创 2018-09-25 13:29:12 · 159 阅读 · 0 评论 -
已知前序或后续遍历和中序遍历重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 · 354 阅读 · 0 评论