数据结构与算法
文章平均质量分 93
分享个人对数据结构与算法的了解
a1059682127
这个作者很懒,什么都没留下…
展开
-
图
图的定义 定义 区别: 线性表:一对一,只有一个直接前驱和一个直接后继 树:一对多,明显的层次结构 图:是由顶点的有穷非空集合和顶点之间边的集合组成:G(V,E) 线性表中的数据元素叫元素,树中的元素叫节点,图中叫顶点 无向边:顶点vi到vj之间的边没有方向,则称该边为无向边,用无序偶对(vi,vj)表示...原创 2021-05-19 21:42:59 · 347 阅读 · 0 评论 -
二叉查找树
(1)题目 总结: 1、涉及二叉搜索树,利用中序遍历得到的数组为有序数组这一性质;验证二叉搜索树和恢复二叉搜索树,可以使用中序遍历的框架,在节点打印的地方判断prev和cur的大小;中序遍历的写法有递归、迭代、莫里斯遍历 2、不同的二叉搜索树,可以将大问题转化为小问题,使用动态规划思路。选取一个结点为根,就把结点切成左右子树,以这个结点为根的可行二叉树数量...原创 2020-03-04 17:57:24 · 206 阅读 · 0 评论 -
图
(1)题目原创 2020-03-03 22:51:49 · 221 阅读 · 0 评论 -
二叉树中的最大路径和
//lt124/*124. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10...原创 2020-03-02 11:08:55 · 936 阅读 · 0 评论 -
求根到叶子节点数字之和
//lt129/*129. 求根到叶子节点数字之和给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出...原创 2020-03-02 11:05:05 · 235 阅读 · 0 评论 -
路径总和 II
//lt113/*路径总和 II给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1...原创 2020-03-02 11:02:22 · 218 阅读 · 0 评论 -
路径总和
//lt112/*路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 ...原创 2020-03-02 10:58:05 · 307 阅读 · 0 评论 -
对称二叉树
//lt101/**对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 //思路1:递归 //思路...原创 2020-03-02 08:37:35 · 163 阅读 · 0 评论 -
相同的树
//lt100/*100. 相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true//思路1:递归*/clas...原创 2020-03-02 08:35:57 · 140 阅读 · 0 评论 -
平衡二叉树
//lt110/*110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。//思路1:递归*/...原创 2020-03-02 08:33:29 · 306 阅读 · 0 评论 -
二叉树的最小深度
//lt111/*111. 二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.//思路1:递归//思路2:迭代(B...原创 2020-03-02 08:31:09 · 310 阅读 · 0 评论 -
二叉树的最大深度
//lt104/*二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。//思路1:自顶向下的DFS//思路2:自底向上的DFS...原创 2020-03-02 08:25:57 · 194 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
//lt105/*从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7//思路1:分治(递归)*/c...原创 2020-03-01 17:58:09 · 415 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树
//lt106/*从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7//思路1:分治(递归)*/c...原创 2020-03-01 17:54:11 · 714 阅读 · 0 评论 -
有序链表转换二叉搜索树
//lt109/*109. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉...原创 2020-03-01 17:50:41 · 218 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
//lt108/*108. 将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 ...原创 2020-03-01 17:46:54 · 254 阅读 · 0 评论 -
二叉树的前序遍历
//lt144/*二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]//思路1:递归O(N)/O(logN)//思路2:迭代O(N)/O(logN)//思路3:莫里斯遍历O(N)/O(1)*/class Solution {public: //思路1:递归(...原创 2020-03-01 15:43:57 · 173 阅读 · 0 评论 -
二叉树的中序遍历
//lt94/* 二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?//思路1:递归//思路2:迭代(显式栈)//思路3:莫里斯遍历O(N)/O(1)*//** * Definition for a binary...原创 2020-03-01 15:42:55 · 384 阅读 · 0 评论 -
后序遍历
//lt145/*后序遍历//思路1:递归//思路2:迭代//思路3:前序+反转(先根-右-左)//思路4:插入队首*/class Solution {public: //思路1:递归 vector<int> postorderTraversal(TreeNode* root) { vector<int> res; postorderHe...原创 2020-03-01 15:41:19 · 1487 阅读 · 1 评论 -
二叉树的层次遍历
//lt102/*二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路1:广度优先搜索(队列)O(N)/O(N)...原创 2020-03-01 15:40:13 · 150 阅读 · 0 评论 -
二叉树的锯齿形层次遍历
//lt103/*二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]...原创 2020-03-01 15:38:36 · 201 阅读 · 0 评论 -
二叉树的层次遍历 II
//lt107/*107. 二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3...原创 2020-03-01 15:36:55 · 184 阅读 · 0 评论 -
树
树的定义 1、非空树有且只有一个根节点 2、子树互不相交 树的节点:包含一个数据元素和若干指向其它子树的分支 节点的度:节点拥有的子树数 叶节点:度为0的节点 树的度:树内节点的度的最大值 孩子:节点的子树的根,该节点称为孩子的双亲 节点的祖先:从根节点到该节点所经分支上的所有节点 堂兄...原创 2020-02-29 00:01:43 · 421 阅读 · 0 评论 -
排序
排序的基本概念 假设含有N个记录的序列为{r1,r2,....,rN},其关键字为{k1,k2,...,kN},需确定一种排列p1,p2,...,pN,使得关键字递增或者递减,使得序列成为一种关键字有序的序列 稳定排序与不稳定排序 假设ki = kj,排序前 ri < rj,排序后 ri 仍 < rj,则称所用的排序方法是稳定的,...原创 2020-02-25 10:36:14 · 275 阅读 · 0 评论 -
栈与队列
第4章 定义 栈是限定仅在表尾进行插入和删除操作的线性表(线性表指:有前驱和后继,表尾指栈顶) 队列只允许在一端进行插入操作、在另一端进行删除操作的线性表 栈比如:浏览网页的后退键、子弹 栈是后进先出(Last in First Out)的线性表(LIFO) 顺序栈(用数组实现) ...原创 2020-02-22 15:46:45 · 144 阅读 · 0 评论 -
链表
第2章 算法复杂度算法的时间复杂度定义(大O记法) 语句总执行次数T(N)跟问题规模N的函数,时间复杂度记作:T(N) = O(f(N)),表达随着问题规模的增大,算法执行时间的增长率和f(N)的增长率相同,f(N)是问题规模N的某个函数。 O(1):常数阶 O(N):线性阶 O(N^2):平方阶 总结:参考大话数据结构第二章小节第3章 线性表 ...原创 2020-02-20 20:12:09 · 173 阅读 · 0 评论 -
数据结构之堆
堆(heaps)是一种特殊的数据组织方式(堆不是容器),STL 中的 priority_queue (优先级队列)容器适配器底层就是采用堆来组织数据存储的。定义这个堆是一个完全二叉树,每个节点与其子节点位置相对。父节点总是大于或等于子节点,这种情况下被叫作大顶堆,或者父节点总是小于或等于子节点,这种情况下叫作小顶堆。注意,给定父节点的子节点不一定按顺序排列。创建堆make_heap...原创 2020-02-14 14:05:52 · 234 阅读 · 0 评论