11.31链表,之前的数据结构(未完,饼)

 根据输入序列建立二叉树

链表

回顾一下二分面积最小

一些性质题回顾

哈夫曼树构建

第十一周——哈夫曼树

5
1 2 2 5 9

37

桶排序

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
#include<string>
using namespace std;
//const int N = 10000;
//int arr[N];
//int search(int begin, int end, int target) {
//    if (begin > end) { return -1; }
//    int left = begin, right = end, mid = (left + right) >> 1;
//    while (left <= right) {
//        if (arr[mid] == target) {
//            return mid;
//        }
//        else if (arr[mid] < target) {
//            right = mid - 1;
//        }
//        else {
//            left = mid + 1;
//        }
//        mid = (left + right) >> 1;
//    }
//    return 0;
//}
//typedef struct node {
//    int data;
//    node* lchild, * rchild;
//}*tree;
//int high(tree root) {
//    if (root) {
//        return max(high(root->lchild), high(root->rchild)) + 1;
//    }
//    return 0;
//}
//int arr[100];
//int siz = 0;
//void shiftup(int child) {
//    int parent = (child - 1) / 2;
//    while (child > 0) {
//        if (arr[parent] >= arr[child]) {
//            break;//判断顶堆,就从堆顶到叶子结点走,如果任意一条路是递增的,那么就是小顶堆;
//            //如果任意一条路都是递减的,那么就是大顶堆。
//        }//如果父母结点比孩子结点大,就停止调整,这里是向上调整,所以向上是更大的,也就是顶上是最大的,所以是大顶堆
//        else {
//            swap(arr[parent], arr[child]);
//            child = parent;
//            parent = (child - 1) / 2;
//        }
//    }
//}
//void insert(int num) {
//    arr[siz++] = num;
//    shiftup(siz - 1);
//}
//
//void shiftdown(int parent) {
//    int child = parent * 2 + 1;
//    while (child <= size - 1) {
//        if (child + 1 <= size - 1 && arr[child + 1] > arr[child]) {
//            child++;
//        }
//        if (arr[parent] > arr[child]) {
//
//        }
//    }
//}
//int popheal() {
//    int num = arr[0];
//    swap(arr[0], arr[size - 1]);
//    size--;
//    shiftdown(0);
//    return num;
//}
//14 21 10 8 5 2
//12 10 8 7 6 3
//10 8 2 1 1 1
//const int N = 1e5 + 5;
//int arr[N];
//int n, m;
//bool check(int d) {
//    int num = 1, target = a[0] + d;
//    for (int i = 1; i < n; i++) {
//        if (arr[i] < target) {
//            continue;//这里不能放牛
//        }
//        num++;
//        target = arr[i] + d;
//    }
//    if (num >= m) {
//        return true;
//    }
//    else {
//        return false;
//    }
//}
//优先特点值小的那个,不能超过
//会产生不满意度
//目的是要输出不满意度
const int N = 10000 + 5, mod = 1e6;
typedef struct node {
    int ch[2], id;
    long long val;
}tree[N];
void rotate(int& cur, int f) {
    int son = tree[cur].ch[f];
    tree[cur].ch[f] = tree[son].ch[f ^ 1];
    tree[son].ch[f ^ 1] = cur;
    cur = son;
}
int tot;
void insert(int& cur, int val) {
    if (!cur) {
        cur = ++tot;
        tree[cur].val = val;
        tree[cur].id = rand();
        return;
    }
    int d = val > tree[cur].val;
    insert(tree[cur].ch[d], val);
    if (tree[tree[cur].ch[d]].id < tree[cur].id) {
        rotate(cur, d);
    }
}
int ls = tree[cur].ch[0], rs = tree[cur].ch[1];
void del(int& cur, int val) {
    if (!cur) { return; }
    if (val == tree[cur].val) {
        if (!tree[cur].ch[0] || !tree[cur].ch[1]) {
            cur = tree[cur].ch[0] + tree[cur].ch[1];
            return;
        }
        int d = tree[ls].id > tree[rs].val;
        rotate(cur, d);
        del(cur, val);
    }
    del(tree[cur].ch[val > tree[cur].val], val);
}
long long pred(int cur, int val) {
    if (!cur) {
        return 0;
    }
    if (val <= tree[cur].val) {
        return pred(ls, val);
    }
    return max(tree[cur].val, pred(rs, val));
}
long long nex(int cur, int val) {
    if (!cur) {
        return 0;
    }
    if (val >= tree[cur].val) {
        return nex(rs, val);
    }
    return min(tree[cur].val, nex(ls, val));
}
int s;
long long ans;
int main() {
    int n, rt = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int bz, x;
        cin >> bz >> x;
        if (bz == 0) {
            if (s <= 0) {
                insert(rt, x);
            }
            else {
                int k1 = pred(rt, x), k2 = nex(rt, x);
                int dele = k1;
                if (k2 - x < x - k1) {
                    dele = k2;
                }
                ans += abs(dele - x);
                ans %= mod;
                del(rt, dele);
            }
            s--;
        }
        else {
            if (s >= 0) {
                insert(rt, x);
            }
            else {
                int k1 = pred(rt, x), k2 = nex(rt, x);
                int dele = k1;
                if (k2 - x < x - k1) {
                    dele = k2;
                }
                ans += abs(dele - x);
                ans %= mod;
                del(rt, dele);
            }
            s++;
        }
    }
    cout << ans << endl;
    return 0;
}

之前的数据结构

第一次实验——模拟队列

第一次实验——括弧匹配

第一次实验——胡同

第一次实验——列车重拍

第六周习题——字符串匹配

第六周习题——后缀表达式

第三周习题——顺序表删除

第三周习题——寻找链表前驱节点

数据结构性质

队列,计算空满

复习之前做过的题

第一次实验——倍数对

第六周习题——7-3

第二周习题——冰雹猜想

第一周习题——全排列

第一周习题——数雷,复习bfs

第二次实验——BFS

求叶子节点个数

new的时候这样即可,这里调用的就是结构体自身的构造函数;如果要传入值进行初始化,就需要重载一个带参的构造函数

递归建树的另一种写法

tree creat() {
    char ch;
    cin >> ch;
    tree root = new node;
    if (ch == '#') {
        root = nullptr;
    }
    else {
        root->data = ch;
        root->lchild = creat();
        root->rchild = creat();
    }
    return root;
}

    tree root = create(); 

总代码 

typedef struct node {
    char data;
    node* lchild, * rchild;
    //node(char x) :data(x), lchild(nullptr), rchild(nullptr) {}
    //node() :data(), lchild(nullptr), rchild(nullptr) {}
}*tree;
tree creat() {
    char ch;
    cin >> ch;
    tree root = new node;
    if (ch == '#') {
        root = nullptr;
    }
    else {
        root->data = ch;
        root->lchild = creat();
        root->rchild = creat();
    }
    return root;
}
int cntleaf(tree root) {//这里就直接传入tree,就表明是node的指针型
    if (root) {
        if (root->lchild || root->rchild) {
            return cntleaf(root->lchild) + cntleaf(root->rchild);
        }
        return 1;
    }
    return 0;
}
void pre(tree root) {
    if (root) {
        cout << root->data;
        pre(root->lchild);
        pre(root->rchild);
    }
}
int main() {
    tree root = create();
    pre(root);
    cout << endl;
    cout << cntleaf(root);
    return 0;
}

 求树的高度

int high(tree root) {
    if (root) {
        if (root->lchild || root->rchild) {
            return 1 + max(high(root->lchild), high(root->rchild));
        }
        else {
            return 1;
        }
    }
    return 0;
}

牛客网题复习

牛客网选择题

二叉树的一些定义,真、满、完全,还有一些计算公式

看一些文章进行复习

力扣题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/207885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker部署kerberos,群晖nas中nfs开启kerberos校验

背景 nas开启nfs存储共享&#xff0c;默认情况下只能给IP/24做限制, 达不到安全效果 需要增加kerberos策略校验&#xff0c;并且持久化kerberos数据&#xff0c;避免容器重启丢失数据 环境描述 宿主机系统&#xff1a;CentOS Linux release 7.9.2009 (Core) Docker版本&#xf…

ESP32-Web-Server编程- 实现 Web 登录网页

ESP32-Web-Server编程- 实现 Web 登录网页 概述 是时候实现更加安全的网页了。登录机制是最简单的控制网页访问权限的方法。 需求及功能解析 本节演示如何在 ESP32 上部署一个 Web 服务器&#xff0c;并建立登录页面的机制&#xff0c;用户可以实现登录、登出的功能&#x…

【Python表白限定】李峋同款可写字版跳动的爱心(完整代码)

文章目录 跳动的爱心环境需求完整代码详细分析系列文章 跳动的爱心 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需要这…

nginx配置反向代理及负载均衡

目录 1.前端发送的请求&#xff0c;是如何请求到后端服务的1.nginx 反向代理的好处&#xff1a;2.nginx 反向代理的配置方式&#xff1a;3. nginx 负载均衡的配置方式 1.前端发送的请求&#xff0c;是如何请求到后端服务的 1.nginx 反向代理的好处&#xff1a; 提高访问速度 因…

一文解决msxml3.dll文件缺失问题,快速修复msxml3.dll

在了解问题之前&#xff0c;我们必须首先清楚msxml3.dll到底是什么。DLL&#xff08;Dynamic Link Libraries&#xff09;文件是Windows操作系统使用的一个重要组成部分&#xff0c;用于存储执行特定操作或任务的代码和数据。msxml3.dll为Windows系统提供处理XML文档的功能。如…

小米摄像头拆机教程

今天拆解一下好久不用的小米摄像头&#xff0c;记录下拆机过程&#xff0c;有需要的小伙伴可以自行查看 一、拆底座 首先拿出底座的四个橡皮塞、把对应的螺丝拧下来就可以了&#xff0c;这一步还是比较简单的 二、拆下底部排线 三、拆下底部电机和底座 按下方的红圈拆掉电机上的…

全网最新最全的Jmeter接口测试:jmeter组件元件介绍

JMeter 的主要测试组件总结如下&#xff1a; 1. 测试计划是使用 JMeter 进行测试的起点&#xff0c;它是其它 JMeter 测试元件的容器 2. 线程组代表一定数量的并发用户&#xff0c;它可以用来模拟并发用户发送请求。实际的 请求内容在Sampler中定义&#xff0c;它被线程组包含…

Redis主从复制实现RCE

文章目录 前置知识概念redis module 利用条件利用工具思路例题 [网鼎杯 2020 玄武组]SSRFMe 前置知识 概念 背景是多台服务器要保存同一份数据&#xff0c;如何实现其一致性呢&#xff1f;数据的读写操作是否每台服务器都可以处理&#xff1f;这里Redis就提供了主从复制的模式…

c++ pcl出现LNK2019 宏定义 PCL_NO_PRECOMPILE

问题&#xff1a;c pcl使用拟合圆柱时出现LNK2019问题&#xff1b; 说明&#xff1a;lib等配置没有问题&#xff1b; 解决方案 在上述代码中添加如下代码即可 #define PCL_NO_PRECOMPILE 是 C 中的预处理器指令&#xff0c;用于在代码中定义一个宏。而 #undef PCL_NO_PRECOM…

汽车行驶不同工况数据

1、内容简介 略 28-可以交流、咨询、答疑 2、内容说明 汽车行驶不同工况数据 汽车行驶不同工况数据 ECE、EUDC、FTP75、NEDC、自定义 3、仿真分析 4、参考论文 略 链接&#xff1a;https://pan.baidu.com/s/1AAJ_SlHseYpa5HAwMJlk1w 提取码&#xff1a;rvol

Unittest自动化测试之unittestunittest_生成测试报告

unittest_生成测试报告 测试报告为测试结果的统计即展示&#xff0c;是自动化测试不可或缺的一部分&#xff0c;利用unittest 可以生成测试报告 方式一、使用第三方 HTMLTestRunner 执行测试用例集&#xff0c;生成网页版测试报告&#xff08;推荐&#xff09; HTMLTestRunn…

进程与线程的区别

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构,mysql,javaee等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 进程与线程的区别 进程线程进程与线…

Java流处理之序列化和打印流

文章目录 序列化概述ObjectOutputStream类构造方法序列化操作 ObjectInputStream类构造方法反序列化操作1**反序列化操作2** 案例&#xff1a;序列化集合案例分析案例实现 打印流概述PrintStream类构造方法改变打印流向 序列化 概述 Java 提供了一种对象序列化的机制。用一个…

回顾Django的第二天

1.http 1.1http请求协议与响应协议 1.1.1简介 http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身…

Linux5-计划任务、进程

计划任务 一、cron 计划任务 周期性计划任务 cron 任务概述 • 用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务 • 软件包&#xff1a;cronie、crontabs • 系统服务&#xff1a;crond • 日志文件&#xff1a;/var/log/crond 管理计划任务策略 • 使用 cro…

threejs教程

应群友要求出了个小白教程&#xff0c;此外也有进阶教程。 替代之前老版本的教程。 教程案例&#xff1a; 新教程地址&#xff1a;https://www.wellyyss.cn/ys-course/#/ 教程使用的是react搭建的 高级教程主要是案例 年底比较忙估计要晚一点才整合。 后续的计划是&#xff1…

三、Linux高级命令

目录 1、重定向命令 1.1 重定向 > 1.2 重定向 >> 该章节的所有操作都在/export/data/shell目录进行&#xff0c;请提前创建该目录。 mkdir -p /export/data/ 1、重定向命令 1.1 重定向 > Linux 允许将命令执行结果重定向到一个文件&#xff0c;本应显示在…

Ubuntu18.04 Udacity project_9_PID_control 如何运行

工程源码和仿真器下载&#xff1a; 源码 仿真器 --- Ubuntu就下载 term2_sim_linux.zip 这个压缩文件即可 紧接着给方框中的文件赋可执行权限 打开project_9_PID_control文件夹 执行如下脚本&#xff0c;安装必要的库&#xff0c;比如websocket&#xff08;程序生成的可执行…

nagios 监控dell设备(网上相关内容较少,特意留档)

#创作灵感#记录工作实践、项目复盘 错误信息&#xff1a; a.Unable to get status information due to technical issues. b.Dell EMC device discovery is in progress... Error: Empty or Invalid Passphrase is configured c.Error: Path not configured for the macro …

C++模板—函数模板、类模板

目录 一、函数模板 1、概念 2、格式 3、实例化 4、模板参数的匹配 二、类模板 1、定义格式 2、实例化 交换两个变量的值&#xff0c;针对不同类型&#xff0c;我们可以使用函数重载实现。 void Swap(double& left, double& right) {double tmp left;left ri…
最新文章