
数据结构
数据结构
秉麟
努力学习
展开
-
常见面试题:小岛问题
思路:2.广度遍历,建立一个存顶点类型的队列,从二维数组中的一个顶点开始入队,1表示有邻接顶点,0表示没有,将这个顶点进行标记为1表示用过,用front存对头,队列不为空则出队,找这个顶点的左右和上下是否存在邻接顶点,有几个图就有几个小岛。思路:1.深度遍历:从二维数组中一个顶点开始,1表示有邻接顶点,0表示没有,深度遍历上下左右深度去找有几个图就有几个小岛。用二维数组来表示地图,其中0表示水域,1表示土地,垂直方向和水平方向的1相连。组成一个小岛,计算给定的地图中有几个小岛。原创 2023-05-13 14:19:25 · 250 阅读 · 0 评论 -
图的两种遍历方式:深度遍历DFS和广度遍历BFS
深度遍历(DFS):先写一个bool*visited标记数组每个顶点都初始为false,使用递归深度遍历顶点的第一个顶点,第一个顶点邻接表的第一个顶点,如果这个邻接表的第一个顶点被标记过,找他的下一个顶点。BFS(广度遍历)类似于树的层次遍历,同样借用与队列,把顶点A放入队列,把A出队用front存下A,把A的邻接顶点全部入队并标记。广度遍历:顶点A->A的所有邻接顶点->A的第一个邻接顶点的所有未使用过的邻接顶点。深度遍历:顶点A->A的第一个邻接顶点->......原创 2023-05-13 13:35:02 · 283 阅读 · 0 评论 -
数据结构:图的插入和删除
有向边:若从顶点vi到vj的边有方向,则称这条边为有向边 ,也称为弧(Arc),用有序偶来表示,vi称为弧尾(Tail),vj称为弧头(Head)。无向边:若顶点vi到vj之间的边没有方向,则称这条边为五向边(Edge),用无序偶对(vi,vj)来表示。线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以为空。在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。原创 2023-05-06 21:18:12 · 1039 阅读 · 0 评论 -
排序:归并排序、堆排序、快速排序
归并排序(Merging Sort)就是利用归并思想实现的排序方法。它的原理就是假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列;再两两归并,...如此重复,直至得到一个长度为n的有序序列为止。1.创建堆:(大根堆)从中间结点开始,中间结点一定在倒数第二层,提高效率。2.排序:把第一个结点和最后一个结点交换,结点个数减一。归并算法的非递归实现。原创 2023-04-23 21:15:13 · 210 阅读 · 0 评论 -
数据结构:二叉排序树
观察发现:要删除的结点的前驱是第一个左孩子的最右边孩子,后继是第一个右孩子的最左侧孩子,则用任意一个取替换要删除的结点,然后删除替换的那个结点。有序序列,查找可以使用二分查找,查找容易,但是插入、删除不方便。6.最左边的孩子一定是最小的结点,最右边的孩子一定是最大的结点。3.右子树如果不空,右子树上所有的结点的值都大于根结点。二叉排序树使得插入和删除的效率变高,查找也高效进行。2.左子树如果不空,左子树上所有结点的值都小于根结点。5.二叉排序树的中序遍历是有序的。注意:二叉排序树是有可能重复的。原创 2023-04-22 19:23:27 · 426 阅读 · 0 评论 -
剑指offer二叉树的最近公共祖先
我们可以用哈希表存储所有节点的父节点,然后我们就可以利用节点的父节点信息从 p 结点开始不断往上跳,并记录已经访问过的节点,再从 q 节点开始不断往上跳,如果碰到已经访问过的节点,那么这个节点就是我们要找的最近公共祖先。输入:root=[3,5,1,6,2,0,8,null,null,7,4] p=5 q=1。输入:root=[3,5,1,6,2,0,8,null,null,7,4] p=5 q=4。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。解法二:哈希表存储父节点。原创 2023-04-21 15:19:18 · 107 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径
本题是找出二叉树中和为某一值的路径,树的路径是指从树根到叶子结点的路径长度之和。我们可以遍历树,把树的每一分支的路径长度与目标长度进行比较,若相等用数组存起来,最后找到所有满足条件的路径,放在二维数组里。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输出:[[5,4,11,2],[5,8,4,5]]路径总和等于给定目标和的路径。是指没有子节点的节点。原创 2023-04-20 10:13:29 · 77 阅读 · 0 评论 -
数据结构:赫夫曼树
带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子节点的带权路径长度之和。路径:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径。树的路径长度:从树根到每一结点的路径长度之和。路径长度:路径上的分支数目称作路径长度。带权路径长度最小的二叉数被称为赫夫曼树。原创 2023-04-17 17:10:32 · 100 阅读 · 0 评论 -
二叉树的恢复
要恢复二叉数只能用先序遍历和中序遍历、中序遍历和后序遍历的结果进行恢复。二叉数有先序、中序、后序遍历。先序遍历:根、左、右。中序遍历:左、根、右。后序遍历:左、右、根。原创 2023-04-16 14:38:17 · 107 阅读 · 0 评论 -
栈(扩容)的初始化、判满、扩容、入栈、获取栈顶元素且删除、获取栈顶元素不删除等等
栈原创 2022-11-12 21:14:44 · 589 阅读 · 0 评论 -
力扣83.删除排序链表中的重复元素
力扣83.删除排序链表中的重复元素原创 2022-11-12 20:38:16 · 653 阅读 · 0 评论 -
力扣234.回文链表
力扣234原创 2022-11-12 20:01:24 · 702 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
从未到头打印链表原创 2022-11-10 21:22:09 · 344 阅读 · 0 评论 -
判断两个链表是否相交
相交链表原创 2022-11-10 20:53:07 · 507 阅读 · 0 评论 -
判断链表是否是环形链表
判断链表是否有环原创 2022-11-10 20:43:58 · 453 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
删除链表节点原创 2022-11-10 20:13:01 · 412 阅读 · 0 评论 -
合并两个有序的线性表
合并有序的顺序表原创 2022-11-06 18:04:40 · 775 阅读 · 0 评论 -
判断链表是否是回文链表
回文链表原创 2022-11-06 17:10:51 · 369 阅读 · 0 评论 -
反转链表(链表的逆置)
链表的逆置原创 2022-11-06 16:46:35 · 502 阅读 · 0 评论 -
求链表入环的第一个交点
求链表入环的第一个交点原创 2022-11-05 18:04:36 · 406 阅读 · 0 评论 -
求两个单链表的交点
求两个单链表的交点原创 2022-11-05 18:01:31 · 530 阅读 · 0 评论