删除二叉树节点 普通二叉树删除普通二叉树的节点,用交换值的操作,使用有返回值的递归,可以通过返回值来移除节点; 代码中目标节点(要删除的节点)被操作了两次: 第一次是和目标节点的右子树最左面节点交换。 第二次直接被nullptr覆盖了。 123456789101112131415161718192021class Solution {public: TreeNode* deleteNode(T 2022-07-25 数据结构与算法 #刷题 #数据结构 #算法 #二叉树
重建二叉树 重建普通二叉树 优化,借助下标索引,而不是vector; 不能从前序和后序重建; 左闭右开(或左闭右闭)就是循环不变量; 一、从中序和后序重建①传vector12345678910111213141516171819202122232425262728293031323334353637383940414243444546class Solution {public: TreeN 2022-07-25 数据结构与算法 #刷题 #数据结构 #算法 #二叉树
遍历二叉树 深度优先遍历(栈)保证入栈节点不是空节点! 前序遍历(中左右)递归1234567891011void visit(TreeNode* cur, vector<int>& res){ if(cur == nullptr) return; res.push_back(cur->val); //中 visit(cur->left, res); //左 vis 2022-07-25 数据结构与算法 #刷题 #数据结构 #算法 #二叉树
二叉树基本概念 树 结点的度:节点拥有的子树数; 树的度:树内各结点度的最大值; 结点的层次从根开始定义,根为第一层; 树的深度或高度:树中结点的最大层次; 路径长度:路径上的分支数目; 树的路径长度是从树根到每一结点的路径长度之和,完全二叉树路径长度最短; 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。 二叉树 二叉树每个 2022-07-25 数据结构与算法 #刷题 #数据结构 #算法 #二叉树
Makefile使用 介绍 当一个工程里面的源文件非常多时,手动敲命令就比较麻烦,就可以使用makefile; Makefile 文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就像一个 Shell 脚本一样,也可以执行操作系统的命令; Makefile 带来的好处就是“自动化编译” ,一旦写好,只需要一个 make 命令 2022-07-23 Linux #Linux #Makefile
GNU编译工具使用 安装12345678sudo apt update# 通过以下命令安装编译器和调试器sudo apt install build-essential gdb# 查看版本号gcc --versiong++ --versiongdb --version gcc/g++基本用法1234gcc filename -o outputfileName# gdb支持gcc filename -g - 2022-07-23 Linux #GNU #Linux #GCC #G++ #GDB
Linux下Vim编辑器的使用 command mode 首先进入的就是命令模式。 模式切换 i 切换到输入模式,以输入字符; : 切换到底线命令模式,以在最后一行输入命令; 移动光标 方向键 移动光标; h/j/k/l 光标左、下、上、右移动一个字符,30j表示下移光标30行; pg up/dn 上下翻页; ctrl + b/f 上下翻页; ctrl + u/d 2022-07-23 Linux #Linux #Vim
KMP算法 KMP KMP算法用来在文本串中匹配模式串,查找模式串出现的位置。 KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。 需要用到next数组,即前缀表。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。 后缀是指不包含第一个字符 2022-07-23 数据结构与算法 #刷题 #数据结构 #算法
高性能并发Web服务器 WebServer高性能并发服务器,由webbench测试可达到上万QPS; 【关键词】 C++11、IO多路复用技术Epoll、Reactor高并发模型、线程池、异步日志系统、最小堆定时器、数据库连接池、有限状态机、自增长缓冲区、单例模式、自定义Json解析器 WebServer 工作流程 流程图 线程池模块 缓冲区模块 Epoll模块 HTTP连接模块 HTTP解析模块 HTTP响应模 2022-07-18 项目 #总结 #项目 #C++ #C++11 #并发服务器 #Json解析 #线程池 #MySQL连接池 #最小堆定时器 #日志 #缓冲区 #Epoll
C++11多线程编程笔记 线程创建、启动、结束 线程类的参数是一个可调用对象,如函数(可以是类中的成员函数)、函数指针、仿函数、lambda表达式、bind创建的对象; jion() 是阻塞主线程并等待子线程执行完,当子线程执行完毕,join()就执行完毕,主线程继续往下执行,join意为汇合,子线程和主线程回合; detach() 是线程分离,主线程不再与子线程汇合,不再等待子线程,detach后,子线程和主线程失去关联 2022-07-12 C++ #C++11 #多线程