数据结构
lucky tiger
要一直前进,一直静下心来学习。
展开
-
平衡二叉查找树的插入删除查找操作
1、删除的节点可能是叶子节点,也有可能不是,不是的话就对要删除节点的子节点前序遍历找到后继节点2、查询操作二叉查找树的查询复杂度,和二分查找一样,插入和查找的时间复杂度均为 O(logn) ,但是在最坏的情况下仍然会有 O(n) 的时间复杂度(线性链表结构)。由于普通二叉查找树会容易失去平衡,极端情况下二叉查找树会退化成线性的链表,导致插入查找复杂度变为O(N),所以引入了平衡二叉树(对左右子树的高度差进行限制)...原创 2020-10-10 10:56:57 · 625 阅读 · 1 评论 -
树知识点总结
满二叉树一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。)完全二叉树二叉查找树二叉查找树,也称二叉搜索树,或二叉排序树。左节点小于根节点小于右节点AVL平衡二叉树(必须是二叉搜索树)它或者是一棵空树,或者左子树右子树深度之差绝对值不超过1,且他的左子树右子树都是一颗平衡二叉树最优二叉树(哈夫曼树)树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tre原创 2020-10-10 09:49:19 · 333 阅读 · 0 评论 -
图基础
边n*(n-1)/2邻接矩阵:原创 2020-07-28 09:51:19 · 84 阅读 · 0 评论 -
递归调用的cnt++问题
1、日常憨憨这里depth+1++depthdepth++区别就在于depth+1我的depth值没有改变所以我后面左右子树都加1不会出现错误++depth我的值已经改变了,这是左右子树加1就有可能冲突比如一个++变成2 另一个又++变成了3depth++直接把depth值带进去函数结束了才++,一样可能重复加/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-05-21 20:28:24 · 1036 阅读 · 0 评论 -
二叉树前中后序遍历
#include<iostream>#include<vector>#include<stack>#include<queue> using namespace std;struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int v) :val(v), left(NULL), right(NULL){}}; //-----------.转载 2020-05-17 21:07:15 · 141 阅读 · 0 评论 -
BFS-广度优先搜索
1、2、class Solution {public: int numSquares(int n) {//BFS int top=floor(sqrt(n));//n开方以后的最小根 整数 2.3 2 queue<int> q;//设置队列 q.push(0);//放置初始元素0,树头0 int res=0;//结果数量 ...原创 2020-04-25 15:42:44 · 130 阅读 · 0 评论 -
priority_queue 优先队列
1、大顶堆 升序排列 从小到大排序 底层实现为最大堆priority_queue<int> big_heap;priority_queue<int,vector<int>,less<int> > big_heap2;2、小顶堆 降序排列、priority_queue<int,vector<int>,greater...原创 2020-04-21 21:31:33 · 184 阅读 · 0 评论 -
哈希
set是集合每个元素只存有一个key值map是一种key(键),value(值)的形式,用来保存键和值组成的集合,键必须是唯一的,但值可以不唯一。unorderedd_map和map的区别unordered_map存储机制是哈希表,即unordered_map内部元素存储机制是无序的map 是红黑树,map的元素是按照二叉搜索树存储,进行中遍历会得到有序遍历。unorde...原创 2020-03-29 11:57:08 · 176 阅读 · 0 评论 -
length,length(),size()详解及区别
length属性:用于获取数组长度。int ar[] = new int{1,2,3} /*** 数组用length属性取得长度*/ int lenAr = ar.length;//此处lenAr=3System.out.println("Arr length:"+lenAr);length()方法:用于获取字符串长度。String str = "Hello Worl...转载 2020-03-25 21:53:08 · 315 阅读 · 0 评论 -
数据结构——KPM算法(字符串查找算法)
1、KMP核心避免不必要的回溯如果相等,则next[14] = next[13]+ 1;如果不相等那么这时候 K =next[K - 1]即 K =next[7 - 1] =next[6] = 3转载 2020-03-12 10:19:09 · 1462 阅读 · 0 评论 -
数据结构之2020疫情期间学习总结
1、线性表 顺序存储和链式存储2、栈与队列3、串4、树5、图链表,栈,队列,二叉树,哈希表,堆原创 2020-03-10 10:39:24 · 1176 阅读 · 0 评论 -
C++ INT_MAX、INT_MIN
int 4个字节 32位INT_MAX 最大值2^31-1 0x7FFF FFFF 一个字节8位2个字母,一个字母4位。INT_MIN最小值-2^31 0x8000 0000符号位 0 正1负-1(int类型)在4个字节中的存储方式为0xFFFFFFFF(1111 1111 1111 1111)。对于-1: -1 = + ,-1是负...原创 2019-12-20 20:02:41 · 1148 阅读 · 0 评论 -
动态规划
求最优解将问题分解位若干子问题,先解子问题1、 力扣70爬楼梯比较基本的爬台阶问题,10级台阶每次一级或2级,爬到头。爬楼梯 1 2 3 4 5 6 7 8 9 10 步数 1 2 3 5 8 13 21 34 55 89 这里很容易理解当前爬楼梯的...原创 2019-12-20 10:09:48 · 117 阅读 · 0 评论 -
结构体的自引用
看树的表示法时发现总结一下结构体自引用问题typedef struct _A{ int a; struct _A *b;}A;结构体A中定义了一个指针b,该指针指向一个结构体A类型。为什么可以这么做呢?因为编译器在编译时已经知道一个指针所占的空间长度4个字节可以为其分配空间。而下面的定义是非法的:typedef struct _A{...原创 2019-11-07 10:33:16 · 736 阅读 · 0 评论 -
树的遍历方法,总结(理解了)最主要的就是你要先把最下面的子树排好
1、前序:根 左子树 右子树 ABDGHECKFIJ2、中序 左子树 根 右子树 GDHBEAKCIJF3、后序 左子树 右子树 根 GHDEBKJIFCA<左子树始终在右子树的前面,根据根的位置不同分为前中后>1、前序根A左子树B然后对于B左子树DG对于D右子树HDGH都是B的左子树,然后左...原创 2019-11-07 09:40:43 · 481 阅读 · 0 评论 -
C++ operator(重载操作符)
类型转换:operator <类型>() 运算符重载:<类型> operator <运算符>(<参数表>)1、operator类的转换函数 ---类型转换:operator <类型>()转换函数必须是类方法转换函数不能指定返回类型转换函数不能有参数类型转换函数的作用是将一个类的对象转换成另一类型的数据从...原创 2019-11-06 21:42:44 · 5602 阅读 · 0 评论 -
回调函数2019/11/6
#include <stdio.h>typedef int(*callback)(int,int);int add(int a,int b,callback p){ return (*p)(a,b);}int add(int a,int b){ return a+b;}int main(int argc,char *args[]){ int re...原创 2019-11-06 16:51:40 · 170 阅读 · 0 评论 -
函数名和取地址之间的关系
&运算符本来的意义,它要求其操作数是一个对象函数名不是对象(函数是一个对象)对于test和&test你应该这样理解,test是函数的首地址,它的类型是void (),&test表示一个指向函数test这个对象的地址,它的类型是void (*)(),因此test和&test所代表的地址值是一样的,但类型不一样。test是一个函数,&test表达式的值是...原创 2019-11-06 16:40:57 · 1579 阅读 · 1 评论 -
指针
p1指向堆区,把堆区地址给p1,指向数值不确定。这里p1,p2的地址是不变的但是它存放的指针变量也就是别人的地址是变化的原创 2019-10-30 10:05:37 · 62 阅读 · 0 评论 -
动态链表
#define _CRT_SECURE_NO_WARINGS#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;typedef struct Teacher{ int data; struct Teacher *next; } Te...原创 2019-10-30 09:42:32 · 222 阅读 · 0 评论 -
【C++数据结构】静态成员变量/函数
对象的内存中包含了成员变量,不同的对象占用不同的内存,所以两个不同对象的成员变量相互独立,比如两个对象都有a但是这两个的值不会互相影响。有时我们希望在多个对象之间共享数据某个对象改变了数据,其他对象可以检测到。注意:static成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配。static成员变量不占用对象的内存,而是在对象之外开辟内存,即使不...原创 2019-10-22 09:59:07 · 99 阅读 · 0 评论 -
【C++数据结构】结构体函数(函数指针,函数实例化)
int (*add)(int a, int b);定义了一个函数指针add,它可以指向一个函数,这个函数有两个int类型参数,并返回一个int类型的值。函数指针一般配合函数实例化使用例如:int add (inta,intb) .add = add结构体函数:(声明结构体函数,初始化结构体函数,调用结构体函数)#include<stdio.h&...原创 2019-10-21 22:09:51 · 1794 阅读 · 0 评论 -
【C++数据结构】栈(Stack)和队列(Queue)
堆:是在程序运行时,而不是在程序编译时,申请一个内存。即动态内存分配,对其访问和对一般内存的访问没有区别。堆就是在程序运行时申请的动态内存,栈是使用堆的一种方法(先进先出)。程序编译时是不分配内存的此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确。所谓在编译时分配空间是指静态分配空间(相对于用new动态申请空间),全局变量静态变量包括一些复杂类型的常量,他们所需要的空间大...原创 2019-10-17 10:45:18 · 296 阅读 · 0 评论 -
红黑树
红黑树1、节点是红色或者黑色2、根节点是黑色的3、每个叶子的节点都是黑色的空节点4、每个红色节点的两个子节点都是黑色的5、从任意节点到其每个叶子的所有路径包含相同的黑色节点...原创 2019-08-03 15:57:59 · 93 阅读 · 0 评论