自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 LeetCode.235二叉搜索树的最近公共祖先_6/29

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和节点 8 的最近公共祖先是 6。示例 2:输入: root = [6

2022-06-29 16:46:34 112 1

原创 POJ2387(Til the Cows Come Home)

题目描述:给出一个n个点,m条无向边的(带非负边权)的图,求出从1走到n的最短路n <= 1000 , m <= 2000,有重边。样例输入5 51 2 202 3 303 4 204 5 201 5 100样例输出90完整代码:#include <iostream>#include <cstdlib>using namespace std;const int M = 1001;int edge[M][M];int path[M] ,

2021-12-04 14:20:12 600

原创 Dijkstra算法#C

算法思路:1.设置两个顶点的集合S,T。a) S中存放已经知道最短路径的顶点,初始时,集合S只有一个顶点,即源点v0。b) T中存放当前还未找到的最短路径的顶点。2.在T集合中选取当前最短的一条最短路径(v0,…,vk),从而将vk加入到顶点集合S中,并且修改源点v0到T中各顶点的最短路径长度。3.重复步骤2,直到所有顶点都被加入到集合S中。从v0到T中顶点vk的最短路径,要么是从v0到vk的直接路径,要么是从v0经S中某个顶点vi到vk的路径在Dijkstra算法里,重复做以

2021-12-04 13:30:05 919

原创 宽搜求迷宫最短路径#C

题目描述给你一个迷宫,并给你一个起点和终点,请你给出从起点到终点的最短路径,若不存在最短路径,输出 -1。迷宫中用 ‘#’ 代表障碍,’S’’G’分别代表起点和终点,其余字符都可以走。输入描述第一行两个数代表迷宫的大小(行数m和列数n)后面的 m 行是迷宫。输入样例:10 10#S######.#…#…#.#.##.##.#.#…##.##.####…#…#.#######.#…#….####.###.…#…G#输出样例:22代码:#include <iostr

2021-11-29 17:38:08 655

原创 P3884 [JLOI2009]二叉树问题#C/C++

题目描述:如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:深度:4 宽度:4(同一层最多结点个数)结点间距离: ⑧→⑥为8 (3×2+2=8)⑥→⑦为3 (1×2+1=3)注:结点间距离的定义:由结点向根方向(上行方向)时的边数×2,与由根向叶结点方向(下行方向)时的边数之和。输入格式输入文件第一行为一个整数n(1≤n≤100),表示二叉树结点个数。接下来的n-1行,表示从结点x到结点y(约定根结点为1),最后一行两个整数u、v,表示求从结点u到结点v的距离。输出格式

2021-11-24 21:12:58 204

原创 线段树-数组实现#C/c++

描述三个操作:1.build创建线段树 2.update单节点修改 3.query区间和的求值1.创建线段树数组存储,用回忆堆的存储方式,线段树的使用和递归息息相关数组a[]存储创建线段树的值,t[]为数组存储后的线段树代码:void build_tree(int a[] , int t[] , int node , int start , int end){ if(start == end) //递归出口,当start=end时表示到了叶子节点 { t[node] =

2021-11-20 17:24:51 445

原创 多项式求导#C

描述将多项式求导并输出,不破坏原本的多项式的情况下#include <iostream>#include <cstdlib>using namespace std;// A = 1x^0 + 2x^3 + 4x^4 + 1x^5typedef struct node{ int x , y; struct node * next;} * link;link Create_L() { link H , p , q; int a , b; H = (nod

2021-11-19 19:31:14 367

原创 7.3二叉树Find相关#C

题目:给定一个二叉搜素树T和两个节点k1和k2(k1 <= k2),输出二叉树中k1到k2之间(包括k1,k2)的节点只需要在二叉树的遍历中进行改动,判断所遍历的节点是否满足条件满足条件则输出即可void print(link T , int k1 , int k2){ if(H = NULL) return; if(T -> data >= k1 && T -> data <= k2) cout << T -> dat

2021-11-17 21:00:45 238

原创 头插法合并链表-C++

实现代码#include <iostream>#include <cstdlib>using namespace std;typedef struct Node{ int data; struct Node * next;}Node , * linkList;void Travel(linkList H)//遍历 { if(H -> next) { linkList p; p = H -> next; while(p != NULL

2021-11-09 18:23:08 900

原创 自调链表-C++

描述每一次插入元素都在链表的前面插入,每一次find一个节点,都将找到的该节点放在链表的最前端若没找到则返回False。完整代码及测试#include <iostream>#include <cstdlib>using namespace std;typedef struct Node{ int data; struct Node * next;}Node , * linkList;void print(linkList H)//遍历 { if(H -

2021-11-09 18:04:40 1036

原创 判断同类二叉树

描述根节点相同,左右孩子节点都相同的两颗二叉树,也可以同为空树#include <iostream>#include <cstdlib>using namespace std;typedef struct node{ int data; struct node * left; struct node * right;}* link;link DFS(link H , link s);void print(link H , int a , int b);li

2021-11-07 14:08:56 54

原创 trie字典树#C++#C

定义 trie,又称前缀树或者字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串你与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值 1.创建节点typedef struct trie{ int end;// int cnt; struct trie * next[26];} * T;T

2021-11-03 18:33:32 120

原创 环形队列-数组实现

通过判满操作输入,再通过判空操作遍历测试及完整代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 6;typedef struct que{ int Q[maxn]; int front , rear; } * link;//初始化 void Init(link q){ q -> front = q -> rear = 0;}//入队

2021-11-01 21:17:12 76

原创 多项式的合并-链表实现

描述键盘输入A,B两多项式,假设 A = 1x^2 + 2x^3 + 4x^4 + 1x^5 B = 9x^0 + 4x^1 + 3x^2 + 6x^3 得到的结果 C = 9x^0 + 4x + 4x^2 + 8x^3 + 4x^4 + 1x^5例如:输入时,A表示为 1 2 2 3 4 4 1 5 0 0 ,其中0 0 为存入的终止判断 每两个数为一组,分别为A的某项的系数和指数 (***A,B都是指数从小到大排序好的多项式)过程1

2021-11-01 19:29:18 1319

原创 括号匹配-栈

题目检查一段C语言代码的小括号( )、 中括号 [ ] 和大括号{ } 是否匹配。/**/,(),[],{}思路 将这段代码存入以字符串中,遍历字符串,分两种情况 1./**/,遇到'/'并且栈顶元素不等于'/'时,将其入栈,初始情况栈为空,遇到‘*’同理, 再次遇到这些符号时则栈顶元素出栈 2.'()','[]','{}',这三种符号,只需要在遇到'(','[''{'时入栈,遇到')',']','}'时将栈顶元素出栈 遍历完后判断栈是否为空,若为空则符号匹配,否则不匹配代码

2021-11-01 18:03:37 223

原创 堆的STL实现#C++

代码:#include <iostream>#include <queue>#include <vector>using namespace std;priority_queue<int> q;/*1.q.top() 获得堆中最大的元素2.q.empty() 判断是否为空3.q.size() 返回堆的大小4.q.push() 插入元素5.q.pop() 删除第一个元素 */ template <typename T> vo

2021-10-27 23:58:28 134

原创 用数组完全二叉树实现堆#C++

堆的基本操作#C++有很多种数据结构可以实现最小堆,包括:完全二叉树,左偏树,斜堆,二项堆,斐波那契堆等等,完全二叉树是这里面内存利用效率最高的。top:返回当前的最小值直接返回根节点,时间复杂度为O(1)int top(){ return h[1];}pop:弹出当前的最小值 (shift_down)删除根节点,递归把子节点补上来完全二叉树pop :先把根节点删除,再把最后一个节点移动到根,然后从上往下更新void pop(){ h[1] = h[heap_siz

2021-10-27 23:13:53 187

原创 线性表实现队列-数组实现

代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 1010;typedef struct node{ int data[maxn]; int front , tail;} * link;//初始化void Init(link que){ que -> front = que -> tail = 0;}//入队void Enter_que(

2021-10-27 20:00:22 68

原创 线性表实现栈-数组实现

代码:#include <iostream>#include <cstdlib>using namespace std;const int maxn = 1010;typedef struct node{ int data[maxn]; int top;} * link;void Init(link stk){ stk -> top = 0;}void Push_stk(link stk , int x){ stk -> data[++st

2021-10-27 19:37:04 73

原创 二叉树代码实现及解析#C++

二叉树的定义:每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。思维导图:结构体:在定义结构体时候,需要定义三个指针,left为左指针,right为右指针,parent为父节点的指针typedef struct Btree{ int data; struct Btree * left; struct Btree * right; struct Btree * parent;}* Bnode;基础的函数的声明:Cre

2021-10-26 12:32:20 346

原创 队列的链表实现#C++

队列的链表实现#C++front 队首rear 队尾在尾部入队,在头部出队代码及解析:#include <iostream>#include <cstdlib>using namespace std;typedef struct node //节点 { int data; struct node * next;}* l;typedef struct que //队列 { struct node * front; struct node * rear;

2021-10-25 20:34:20 67

原创 冒泡排序#C++

冒泡排序#C++#include <iostream> using namespace std;int main(){ int arr[1001]; int n; cin >> n; for(int i = 0 ; i < n ; i++) cin >> arr[i]; for(int i = 0 ; i < n - 1 ; i++) for(int j = 0 ; j &lt

2021-10-25 02:09:22 88

原创 二叉树的创建和遍历#C++

二叉树的创建和遍历代码:#include <iostream>using namespace std;/*二叉排序树的二叉链表存储结构*/typedef struct BTNode { int key; struct BTNode *lchild, *rchild;}*BSTree;/*二叉排序树的插入*///递归的过程BSTree InsertNode(BSTree T, BTNode *s) { if (T == NULL) retur

2021-10-24 00:25:02 50

原创 C++ 高精度

C++ 高精度高精度乘法:#include <iostream>#include <cstring>using namespace std;//定义变量 const int N = 1e6 + 10;string s1 , s2;int m = 0;int a[N] , b[N] , c[N];int lena , lenb , lenc;int main(){ //初始化赋值 memset(a , 0 , sizeof(a)); memset(b

2021-10-23 15:55:27 478

原创 线性表-通讯录的链表实现#C++

线性表-通讯录的链表实现流程图:代码:#include <iostream>#include <cstdlib>#include <cstring>#include <fstream>using namespace std;int len = 0;typedef struct stu{ char id[1001]; char name[1001]; char numb[1001]; struct stu * next;}stu

2021-10-23 10:12:46 811

原创 线性表-栈的链表实现#C++

线性表-栈的链表实现#include <iostream>#include <cstdlib>using namespace std;typedef struct Adt{ int data; struct Adt * next;}Adt , * link;//声明int IsEmp(link S);void CreateStack();void MakeEmpty(link S);void Push(int x , link S);void Pop(li

2021-10-23 10:07:08 71

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除