数据结构
我有一個夢想
IT
展开
-
LeetCode-449 序列化和反序列化二叉搜索树 (根据前序中序构造二叉树)
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。题解想到一个最笨的方法 就是根据二叉树的性质 二叉树可以根据前序遍历和中序遍历还原二叉树二叉树搜索树的中序遍历就是严格递增序列 这样我.原创 2022-05-12 09:22:18 · 192 阅读 · 0 评论 -
LeetCode-160 相交链表
求两个相交的链表节点题解利用Map存节点 遍历链表 利用两个指针pa pb遍历两个链表 pa == pb 则返回当前节点 pa遍历完链表1则把pa指向链表2pb遍历完链表2则把pa指向链表1 当pa pb 遍历完两个链表都没有相同的节点 则为无交点 有交点必会在两则遍历过程中遇到 代码class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *h...原创 2022-03-18 15:09:35 · 1026 阅读 · 0 评论 -
二叉树遍历—非递归方法—C语言实现
二叉树的非递归遍历:先序、中序、后续、层序。其中前三种用了栈来辅助存储结点,层序利用了队列来辅助存储结点。后序较前面两种遍历稍微复杂点,因为根结点是最后输出的,所有根结点要访问到2次,在第二次访问时输出,需要做辅助标记。为了简化问题,二叉树也简单的形同:ABC##DE###FG### #代表空结点。当然,为了和前面的知识点联系起来,stack和queue都是自己写的,没有用S...原创 2018-12-10 22:23:34 · 1605 阅读 · 1 评论 -
图的邻接矩阵表示-C语言
图的邻接矩阵表示#include <stdio.h>#include <string.h>//#define INT_MAX 0XFFFFFF#define INFINIFY INT_MAX#define MAX_VERTEX_NUM 100typedef struct Graph{ int vexs[MAX_VERTEX_NUM+1]; ...原创 2018-12-15 22:19:17 · 1066 阅读 · 0 评论 -
二叉树基本操作-C语言实现
#include <stdio.h>#include <stdlib.h>typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;void CreatBiTree(BiTree &T){ int e; s...原创 2018-12-06 21:13:46 · 1367 阅读 · 4 评论 -
数据结构-单链表操作
//// main.c// Link_List//// Created by Smallflyfly on 2018/11/9.// Copyright © 2018 fang. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <string.h>...原创 2018-11-09 22:16:26 · 278 阅读 · 2 评论 -
数据结构-线性表操作
//// main.c// List_operate//// Created by Smallflyfly on 2018/11/8.// Copyright © 2018 fang. All rights reserved.//#include <stdio.h>#include <string.h>#include <stdlib....原创 2018-11-09 11:03:48 · 235 阅读 · 0 评论 -
二叉树的非递归遍历-数据结构
二叉树的非递归遍历:先序、中序、后续、层序。其中前三种用了栈来辅助存储结点,层序利用了队列来辅助存储结点。后续较前面两种遍历稍微复杂点,因为根结点是最后输出的,所有根结点要访问到2次,在第二次访问时输出,需要做辅助标记。为了简化问题,二叉树也简单的形同:ABC##DE###FG### #代表空结点。当然,为了和前面的知识点联系起来,stack和queue都是自己写的,没有用S原创 2015-09-24 09:32:40 · 756 阅读 · 0 评论 -
栈的应用-表达式求值-数据结构
栈的应用之一,表达式求值,严慧敏书上给的例子是只有1位数的输入,这里稍微改下,处理下多位数的+、-、*、/。表达式要求输入合法,且除数要能整除,不然就int掉,算出来错了,主要就是书中优先级表的应用。省去那些STATUS的返回,什么ERROR OK OVERFLOW 的。完整代码:#include#include#include#define InitStackSize原创 2015-09-22 14:42:26 · 1299 阅读 · 0 评论 -
如何判断单链表是否存在环
---------------------作者:Mlib来源:CSDN原文:https://blog.csdn.net/u010983881/article/details/78896293版权声明:本文为博主原创文章,转载请附上博文链接!如何判断单链表是否存在环有一个单向链表,链表当中有可能出现“环”,就像题图这样。如何用程序判断出这个链表是有环链表?不允许修...转载 2019-03-02 23:02:27 · 466 阅读 · 0 评论 -
二叉树最大深度(python)--leetcode
给定一个二叉树,找出其最大深度。递归求解:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonecla...原创 2019-03-02 23:18:50 · 1261 阅读 · 0 评论 -
二叉树的层次遍历-python实现-Leetcode
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]层次遍历二叉树 并且每层需要分开保存思路:记录每层的最后一个位置...原创 2019-03-03 13:53:45 · 780 阅读 · 0 评论 -
二叉树的前序遍历-python实现-Leetcode
二叉树的前序遍历:递归:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Soluti...原创 2019-03-03 16:12:42 · 2969 阅读 · 0 评论 -
二叉树的中序遍历-python实现-Leetcode
递归和非递归方法中序遍历二叉树 Leetcode题递归方法:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right =...原创 2019-03-03 16:45:49 · 1374 阅读 · 0 评论 -
二叉树的后续遍历-python实现-Leetcode
递归和非递归两种方法:递归:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solu...原创 2019-03-03 19:49:02 · 424 阅读 · 0 评论 -
二叉树的层次遍历 II-python-Leetcode 107
二叉树的层次遍历 IILeetcode 107此题为二叉树的层次遍历翻版,就是从底往上输出层次遍历结果其实就是把二叉树的层次遍历这题最后输出reverse()就OK了python代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# ...原创 2019-03-03 20:31:43 · 466 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树-Leetcode 105-python
从前序与中序遍历序列构造二叉树-Leetcode 105思路来自:https://blog.csdn.net/htt789/article/details/80164049脑子不好使思路:1.前序序列第一个为根结点,在中序序列中找到该结点位置,中序序列就分为左右子树结点2.前序序列除第一个结点,其余为左右子树结点,根据中序序列中左右子树各自的长度将前序序列划分了左右子树3....原创 2019-03-03 22:31:24 · 317 阅读 · 0 评论 -
对称二叉树-Leetcode 101-python
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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递归方法:# Definition fo...原创 2019-03-15 11:11:16 · 248 阅读 · 0 评论 -
二叉搜索树的定义、查找、插入和删除 (转载)
转载至:https://blog.csdn.net/u011630575/article/details/79934657二叉搜索树的定义二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 任意...转载 2019-03-07 21:37:41 · 196 阅读 · 0 评论 -
栈的应用-迷宫问题-数据结构
栈的基本应用之一,解决迷宫问题,主要是利用栈的递归作用。就是个搜索加回溯,写了两遍,第一遍小问题调到两点没调试出来,第二天干脆重新写了,一次就出来了。后面几个例子运行了下没什么问题,可能有些问题暂时没发现,主要不像OJ,人家已经把数据构造好了,自己就懒的去构造数据了例子代码:#include#include#include#define Initstacksize原创 2015-09-18 14:42:36 · 778 阅读 · 0 评论 -
栈的基本应用-数制转换-数据结构
栈的基本操作-数制转换,其实就是余数部分先存起来,倒序输出为了简单,就不考虑16之类的需要转换ABCDEF的,就简单的比如十进制转二进制之类的转化简单例代码:#include#include#include#define InitStackSize 1000typedef struct SqStack{ int *base,*top; int stacksize;}原创 2015-09-16 11:00:33 · 865 阅读 · 0 评论 -
一元多项式相加-链表应用
一元多项式相加,相减与相加类似。链表应用完整代码:#include#include#includeusing namespace std;typedef struct LNode{ struct LNode *next; int exp; //index int coef; //coefficient}*Linklist,LNode;void InitLin原创 2015-09-10 22:17:15 · 1694 阅读 · 0 评论 -
最短路SPFA
求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,是西南交通大学段凡丁于1994年发表的。从名字我们就可以看出,这种算法在效率上一定有过人之处。很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。简洁起见,我们约定加权有向图G不存在负权回路,即最短路径一原创 2014-11-10 00:03:47 · 378 阅读 · 0 评论 -
二叉树的基本操作-递归实现
二叉树的一些基本操作学习1.二叉树定义typedef char Elemtype;typedef struct TreeNode{ Elemtype data; struct TreeNode *lchild,*rchild;}TreeNode,*BinTree;2.二叉树建立(先序递归建立)//先序序列构造二叉树,形如ABC##DE###FG###void原创 2015-09-02 00:33:40 · 1147 阅读 · 0 评论 -
归并排序
1.排序思想① 初始时,将每个记录看成一个单独的有序序列,则n个待排序记录就是n个长度为1的有序子序列;② 对所有有序子序列进行两两归并,得到n/2(向上取整)个长度为2或1的有序子序列——一趟归并;③ 重复② ,直到得到长度为n的有序序列为止。 上述排序过程中,子序列总是两两归并,称为2-路归并排序。其核心是如何将相邻的两个子序列归并成一个子序列。原创 2015-01-15 14:43:41 · 435 阅读 · 0 评论 -
结构体简单排序-一级-二级
结构体简单的二级排序sort 和 qsort.#include#include#include#includeusing namespace std;typedef struct node{ int x,y;}G;int cmp1(const G &a,const G &b) { if(a.x!=b.x) return a.x>b.x; //以X递减排序 e原创 2015-06-23 10:17:01 · 2182 阅读 · 0 评论 -
单链表的基本操作-数据结构
单链表的基本操作1.单链表的建立:包括头插法和尾插法Linklist HeadCreatLink()Linklist TailCreatLink()2.获取第n个元素Statue GetElem(Linklist L,Statue n)3.获取元素在链表中的第一个位置Statue FindElem(Linklist L,Elemtype key)4.在第n个位置插入元素原创 2015-09-04 23:59:42 · 752 阅读 · 0 评论 -
[数据结构]字符串匹配KMP
KMP主要用于字符串匹配关键在于NEXT数组的求解,当匹配不成功的时候模式串的回退位置就由NEXT数组决定。NEXT数组只与主串有关,其求解过程就运用到了KMP思想,求解过程网上很多,个人觉得比较难以理解。NEXT数组应用,下标从1开始:前缀与后缀的最大匹配长度,next[i]为前缀与后缀的最长匹配长度求循环节,循环周期if i%(i-next[i])==0,说明字原创 2015-08-28 10:16:36 · 449 阅读 · 0 评论 -
基数排序
1.基数排序思想基数排序(Radix Sorting) 又称为桶排序或数字排序:按待排序记录的关键字的组成成分(或“位”)进行排序。 基数排序和前面的各种内部排序方法完全不同,不需要进行关键字的比较和记录的移动。借助于多关键字排序思想实现单逻辑关键字的排序。把带排序的数字看成‘0’-‘9’的字符串组成,从低位到高位,或者从高位到低位 根据数字先分配,然后重原创 2015-01-17 16:47:10 · 582 阅读 · 0 评论 -
线索二叉树-数据结构
按照教材进行中序二叉树线索化线索化就是就将二叉树的多出来的n+1个链域用做指向前驱和后继用,前驱后继指的是按中序遍历二叉树产生的前驱和后继ltag=0 有左孩子 ltag=1 无左孩子,指向前驱rtag=0 有右孩子 rtag=1 无右孩子,指向后继例子代码: 构造二叉树 形如ABC##DE###FG####include#include#includetype原创 2015-09-25 12:28:15 · 447 阅读 · 0 评论 -
双向链表的基本操作-数据结构
简单的双向链表的基本操作,非循环双向链表。其实循环双向链表就是最后一个元素p-next=NULL改为p->next=L;1.头插法建立,尾插法建立DouLinklist HeadCreatList()DouLinklist TailCreatList()2.插入元素Statue InsertLink(DouLinklist &L,Statue n,Elemtype key)3.原创 2015-09-07 13:29:37 · 621 阅读 · 0 评论 -
栈的应用-括号匹配-数据结构
栈的一个简单应用,括号匹配的问题,为了简便起见,就讨论()[ ] 去掉繁琐的return ERROR 栈容量不够处理。例代码:#include#include#include#define InitStackSize 1000typedef struct SqStack{ char *top,*base; int stacksize;}SqStack;v原创 2015-09-16 14:23:44 · 659 阅读 · 0 评论 -
堆排序(Heap Sortd)
1.堆的定义n个元素的序列H={k1, k2 , …kn} ,满足:情形1:ki 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整。2.堆的性质①堆是一棵采用顺序存储结构的完全二叉树, k1是根结点;②堆的根结点是关键字序列中的最小(或最大)值,分别称为小(或大)根堆;③从根结点到每一叶子结转载 2015-01-12 09:43:40 · 620 阅读 · 0 评论 -
快速排序(QuickSort)
关于快速排序的文章很多,讲的也很明白,大致是用原创 2014-11-11 21:13:14 · 710 阅读 · 0 评论 -
链队列基本操作-数据结构
链队列的基本操作,基本和严慧敏的书同步,初始化、入队、出队、队长、清空队列、销毁队列注意清空和销毁的区别。例代码:#include#include#include#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Elemtype;typedef int Status;typedef struct L原创 2015-09-16 00:41:26 · 760 阅读 · 0 评论 -
循环队列-顺序存储结构-数据结构
循环队列采用顺序存储结构,简单的基本操作,入队,出队,取对头元素,判断是否空队列,队列长度例代码:#include#include#include#define ERROR 0#define OK 1#define OVERFLOW -1#define MAXSIZE 10typedef int Elemtype;typedef int Status;type原创 2015-09-15 16:19:09 · 684 阅读 · 0 评论 -
链栈的基本操作-数据结构
链栈写的跟头插法建链表一样,就是头插法建起来,然后就是链表的基本操作了。例代码:#include#include#include#define OK 1#define ERROR 0#define VOERFLOW -1typedef int Status;typedef int Elemtype;typedef struct LNode{ Elemtype da原创 2015-09-15 00:24:26 · 926 阅读 · 0 评论 -
栈的基本操作-数据结构
栈的基本操作,顺序表动态存储。基本操作:栈初始化,入栈,出栈,取栈顶元素,判断是否是空栈,清空栈。例代码:#include#include#include#define Initsize 100#define Increase 100#define ERROR 0#define OK 1#define OVERFLOW -1typedef int Status;原创 2015-09-14 15:15:44 · 645 阅读 · 0 评论 -
线性表的基本操作-数据结构
主要是线性表的建立,删除,插入。完整代码:#include#include#include#includeusing namespace std;#define MAXSIZE 100#define List_Init_Size 50#define Increase 20#define OK 1#define ERROR 0#define OVERFLOW -1t原创 2015-09-08 13:30:53 · 768 阅读 · 0 评论 -
二分查找
1.算法二分查找是比较常见的一种查找算法,二分顾名思义,一分为二,将有序的序列(升序或者降序)分成两部分,根据关键字的大小确定所在区间,然后继续把新区间一分为二,判断新的区间,直到找到或者找完也没找到为止。2.举例代码#include#include#include#includeusing namespace std;int array[1001];int B原创 2015-01-23 08:25:22 · 446 阅读 · 0 评论