- 博客(56)
- 收藏
- 关注
原创 从前序与中序遍历序列中构造二叉树
力扣——题目运用迭代的方法去求解/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr)
2022-05-28 11:17:04
65
原创 二叉搜索树与双向链表问题
二叉搜索树与双向链表_牛客题霸_牛客网/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: TreeNode* Convert(TreeNode* pRootOfTree) { i
2022-05-28 08:59:22
54
原创 力扣-找公共祖先问题
力扣-找公共祖先问题方法1:看是不是在节点的左右节点,如果在,就说明root即使节点class Solution {public: bool Find(TreeNode* root, TreeNode*x)//找节点 { if(root==nullptr) return false; if(root==x) return true; return Find(root->left,x)||Find(root->
2022-05-27 13:57:31
116
原创 幸运的袋子-牛客网
#include<iostream>#include<vector>#include<algorithm>using namespace std;int getLuckyPacket(vector<int> arr,int size,int pos,int sum,int mulit){ int count=0; for(int i=pos;i<size;i++) { sum+=arr[i]; .
2022-05-15 23:02:29
102
原创 牛客网之参数解析问题
参数解析__牛客网写一个暴力点写法#include<iostream>#include<vector>#include<string>using namespace std;int main(){ vector<string> ans; string str; getline(cin, str); int begin = 0;// int end = 0; int sz = str.s
2022-05-14 22:19:12
127
原创 命名管道的学习
key_t key = ftok(PATH_NAME, PROJ_ID);if(key < 0){perror("ftok");return 1;}
2022-05-02 20:33:40
144
原创 Linux 基础知识详解
今天我们来谈论下优先级的概念,什么是优先级等。概念:就是CPU分配资源的先后顺序,也就是指挥进程的优先权限。优先权高的进程有优先执行的权力,优先级越高的进程,起先被执行。现在我们看下,我们怎么查看进程的。当你在运行一个进程的时候,用命令 ps -al 查看是优先级的,其中PRI是优先级,其值越小,优先级越高,NI是nice值,其作用就是用来调整优先级的,如果NI是负数,会让其优先级增加,如果是正数,就会让优先级下降,其NI值的取值范围是-20-19;PID是这个进程的编号,PPID是父进程的
2022-04-04 13:09:06
429
原创 进程的概念(详解)
首先我们来讨论下,进程和程序的区别,有些人说进程就是存储在内存的程序,其实这样的说法是不正确的,其实进程是程序加PCB(数据管理模块),就是进程信息被存放在一个加控制模块的数据结构中,可以理解为进程属性集合。接下来我们来学习下一个重要的函数:fork函数fork函数其作用就是创建一个子进程,首先我们创建一个子进程的方法有两种,一个是cmd or run command fork ,在操作系统的角度上讲,上面建立的进程方式没有什么不同。fork的本质是创建进程,那么它是不是一定会导致系统里多一个进
2022-04-03 11:51:19
414
原创 手撕vector
#pragma once#include<iostream>using namespace std;namespace WGX{ template<class T> class vector { public: typedef T* iterator; typedef const T* const_itreator; vector() :_start(nullptr) , _finsh(nullptr) , _endofstor.
2022-04-01 17:16:51
386
原创 vim的基本用法
现在目录下面创建一个文件,我们现在创建一个test.c文件然后用vim文件打开进入编辑界面,vim最重要有三种模式,一种是命令模式,一种是低行模式,插入模式,所以我们现在要掌握怎么进行三种模式的切换。首先我们一打开vim默认的模式就是命令模式,如果我么要进入低行模式的话,按shift+:,进入低行模式我们可以按w+q,来进行退出,其中w是保存,q是推出,还有一点如果加!就是强制的意思。我们怎么从命令模式进入插入模式呢,那么我们按“i”就可以了,在插入模式里面我们可以输入你想输入的东西。但有一
2022-03-27 12:19:52
666
原创 电话号码组合(力扣)
这样的题目其实就是提多叉树的遍历,一直向下,然后从左向右遍历。class Solution { string arr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//把所有的组合列出来public: void _letterCombinations(const string& digits,size_t i,string Cominstr,vector<string>& s...
2022-03-25 12:50:37
335
原创 C++之string源代码详解
stiring 相比于c的char 要方便多了,string里有很多的库函数,现在我们来把库函数的实现讲解下#include<iostream>#include<string.h>#include<assert.h>using namespace std;namespace WGX//建一个空间域{ class string { public: typedef char* iterator;//迭代器 typedef const cha
2022-03-19 14:01:51
3613
原创 c++之模板初阶
目录1.泛型编程2 函数模板3 类模板1.泛型编程怎么去实现一个通用的交换函数呢,如果我们要交换int,或者double,再或者char,如果这样,我们是不是要写三个不同的函数,这样就很鸡肋,很多代码是复用的,怎么想着去简化它呢,于是大佬们就想到了一个方法。下面是重复的函数void Swap(int& left, int& right){int temp = left;left = right;right = temp;}void Swap(double
2022-02-22 10:57:50
506
原创 C++之引用详解
引用的概念:引用没有重新定义一个变量,只是给变量取了个别名,编译器不会给引用名重新开辟空间,它和它的应用变量共同使用一个内存空间。类型&引用变量名==引用实体;void TestRef(){int a = 10;int& ra = a;//<====定义引用类型printf("%p\n", &a);printf("%p\n", &ra);}引用的特性:1.引用在定义时必须初始化.2.一个变量可以有多个引用3.引用一旦引用了一个实体
2022-01-14 11:23:00
278
原创 牛客网—二叉树遍历(C语言)
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。示例1输入:abc##de#g##f###
2022-01-14 01:07:43
274
原创 力扣—对称二叉树(C语言)
主要的思想就是,看看其左子树的值和右子数的值相不相等,如果相等就递归后面的左子树和右子树。/** * Definition for a binary tree node. * struct TreeNode {//创建的结构体 * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool _isSymmetric(struct TreeNode* root1,struct...
2022-01-14 01:01:50
321
原创 力扣-平衡二叉树(C语言)
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。左子树的高度和右子树的高度相差不能大于1,所以只需要求出做左子树的深度和右子树的深度,再看看它们相差是不是大于1。代码实现**e. * struct TreeNode {//创建一个结构体 * int val; * struct TreeNode *left; * struct TreeNode *...
2022-01-14 00:54:55
115
原创 力扣(反转二叉树)C语言
如图所示,可以利用前序遍历实现这个功能。void _invertTree(struct TreeNode* root){ if(root==NULL) { return NULL; } struct TreeNode*tmp=root->left; root->left=root->right; root->right=tmp; _invertTree(root->left); _in...
2022-01-11 13:46:47
296
原创 力扣(两数相加)C语言
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头如图所示:解题思路,如果两个链表的长度都相等,那比较简单,直接加就可以了,难的是长度不相等,怎么处理这不相等情况,有一种方法是,将短的后面补零,再进行相加。/** * Definition for singly-linked list. * struct
2022-01-11 10:44:49
330
原创 C++之默认参数详解
下面将介绍另一项新的内容--默认参数。默认参数指的是当函数中调用中缺省了实参自动使用一个值,比如下面程序:void Print(int a=1){ cout<<”a的值:“<<a<<endl;}此时如果不给参数,打印的就是1,如果给了其他的数,就打印其他的数。其实,默认参数可以分为两种,一种是全缺省参数,一种是半缺省参数。即全缺省参数就是所有参数都缺省了,都有默认值,半缺省就是一部分有默认值,一部分没有。首先我们先来我们来看下全缺省的情况:
2022-01-08 13:02:48
4577
原创 排序之选择排序(图解)
选择排序的思想其实比较简单,每循环一遍,就找到一个最小的或最大的,找到最小的,就和最左边的换,找到最大的就和嘴右边的换,如下图所示:此图是找小的,每次遍历一遍就把找到最小的放在左边,直到结束。其实我们可以优化代码,同时找到最大的喝最小的,把最大的放在右边,最小的放在左边,如此循环下去。void selectSort(int* a, int size){ //选择排序的思想就是每一次找到一个最大的,放到最后面,找到一个最小的放到最前面 int left = 0;//定义最左边的下标 in
2022-01-06 17:26:08
2974
2
原创 排序之希尔排序(图解)
为什么希尔排序会出来,主要是为了弥补插入排序的缺点,插入排序它的最好的时间复杂的为O(n),但如果一开始是一个逆序出来让我们排,那时间复杂度就是O(n^2)了,因为每次排,都会移动所经过的数。希尔排序其实也是插入排序的变形,就是在做最后一部插入排序之前,做一个预排序,使它先接近有序,然后再排。void shellSort(int* a, int size){ int gap = size; while (gap > 1) { gap = gap / 3 + 1; f.
2022-01-06 14:14:18
1376
原创 排序之插入排序(图解)
插入排序就像我们打扑克一样,在理排的时候,如果有新牌,就会一个一个比较,看谁的大。代码如下#include<stdio.h>#include<assert.h>void Swap(int* px, int* py)//交换数据{ int tmp = *px; *px = *py; *py = tmp;}MyPrint(int* a, int sz)//打印数组{ for (int i = 0; i < sz; i++) { prin.
2022-01-06 08:50:39
300
原创 求链式二叉树第K层的结点数
之前我们写过怎么求叶子结点的个数,叶子结点个数就是求它的左子树的叶子结点,加上柚子树的叶子结点,依次递归下去,可能最难得就是跳出递归的条件,由于是求叶子结点,所以当它的左右子树都为空的时候就返回1,如果是空的树就返回零。同样的,我们要找K层的节点数,所以我们每遍历一层就k-1最后当k==1的时候,就到了第K层了,所以这就是我们的终止递归的条件。#include<stdio.h>#include<stdlib.h>#include<assert.h>typede
2021-12-23 15:58:40
1711
原创 判断单值二叉树的详解与实现(c语言)
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false,如图所示:那如何证明它是单值二叉树呢,我们是不是可以把大问题化成小问题来解决。比如,我们先比较头结点和左右子结点的值。然后依次往下递归。bool isUnivalTree(struct TreeNode* root){ if(root==NULL)//如果为空就返回真 { return true; } if(r...
2021-12-22 16:54:55
627
原创 (力扣)循环队列的实现与详解(C语言)
循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则,并且队尾被连接在队首之后以形成一个循环。它也被称之为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间,在普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即是在队列前面仍有空间。但是在使用循环队列,我们能使用这些空间去存储新的值。如图所示,可以形象的理解为这样的队列。但我们在实现循环队列的时候,可以用数组实现,也可以用链表来实现,那我们接下来就先试试怎么用数组来实现这个循环队列。此时我..
2021-12-21 17:12:18
871
原创 力扣(复制带随机指针的链表)(C语言)
题目:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> ...
2021-12-09 14:35:55
153
原创 快速排序的递归解法(C语言)
快速排序在众多排序正如它的名字一样,速度是比较快的相对于其他的排序快速排序的基本思想是:从数据中取一个数作为基数,一般我们在选基数的时候,最好选最左边或最右边的数,同时从左边和右边同时遍历数组,如果要排升序,从右边往左边遍历的找小于基数的数,从左边往右边遍历的找大于基数的值,然后两个位置就互换,从而就把大的往右边甩,小的往左边甩,于是就完成了单趟的快速排序,其平均的时间复杂度为O(nlog n)int GetMid(int*a, int left, int right)//为了避免去最小的值做
2021-12-06 13:55:56
1375
1
原创 层序遍历详解(c语言)
之前讲过的中序遍历前序遍历、后序遍历,其中都是用的是递归来解决的,但我们的层序遍历它的特点是,先遍历第一层的,然后再遍历第二层的,依次下去,所以在这里我们想到的是队列,队列的特点是先进先出,所以我们运用对列来实现这个问题#include<stdio.h>#include<stdlib.h> //头文件#include<assert.h>#include<stdbool.h>struct BinaryTreeNode;typedef struc
2021-12-06 10:24:41
2491
原创 链式二叉树K层结点个数问题
手动建二叉树以前就有。现在只讲实现这个功能的接口函数。int BinaryTreeKSize(BTNode*root,int k){ if (root == NULL) { return 0; } if (k ==1) { return 1; } if (k < 1) { return 0; } return BinaryTreeKSize(root->left, k - 1) + BinaryTreeKSize(root->right, k - 1
2021-11-29 10:51:04
79
原创 链式二叉树求结点的问题
在之前已经写了求叶子结点的个数,其实两者相差不多,只是求叶子结点跳出函数的要求不一样,当孩子的左右结点都为空的时候,返回1,求结点个数就不一样,当节点不为空就返回1,总体思想就是,结点个数为左孩子加右孩子再加1,这个1就是加的自己的个数。代码如下#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>typedef int BTDataType;typedef struct BinaryTr
2021-11-29 10:11:52
288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人