【练习3】

1.将二叉搜索树转为排序的双向链表

在这里插入图片描述
(好久没看数据结构,忘完了,学习大佬的代码)

class Solution {
public:Node* pre=nullptr,*head=nullptr; //pre为每次遍历时的前一个节点,head记录头节点Node* treeToDoublyList(Node* root) {if(root==nullptr)return nullptr; //空树else{dfs(root); //得到pre和headhead->left=pre; //根节点的左指针指向它的前驱pre->right=head;//前驱的右指针指向根节点return head;}}void dfs(Node* root){if(root==nullptr)return;//空节点直接返回else{dfs(root->left);//中序遍历,先左,后右if(pre)pre->right=root;//如果该节点的左子树不为空,那么将它的前驱右指针指向它else head=root;//如果该节点的左子树为空,它就已经为根节点了root->left=pre;//此时的根节点的左指针指向它的前驱pre=root;//以该节点的后驱作为新的根节点dfs(root->right);}}

在这里插入图片描述

2.序列化与反序列化二叉树

在这里插入图片描述

class Codec {
public:// 将二叉树转为字符串string serialize(TreeNode* root) {ostringstream res;if(root == nullptr) return "null"; // 修改此处,返回字符串 "null"else {queue<TreeNode*> que;que.push(root);TreeNode* temp = nullptr; // 修改此处,初始化为nullptrwhile(!que.empty()) {int len = que.size();while(len--) {temp = que.front();que.pop();if(temp) {res << temp->val; // 修改此处,不添加空格que.push(temp->left);que.push(temp->right);} else {res << "null"; // 修改此处,添加字符串 "null"}res << " "; // 添加空格,分隔节点值}}return res.str();}}// 重建二叉树TreeNode* deserialize(string data) {istringstream input(data);string temp;vector<TreeNode*> vec;while(input >> temp) {if(temp == "null") {vec.push_back(NULL);} else {vec.push_back(new TreeNode(stoi(temp)));}}int loc = 1;for(int i = 0; i < vec.size(); i++) {if(vec[i] == NULL) continue;if(loc < vec.size()) {vec[i]->left = vec[loc];loc = loc + 1;}if(loc < vec.size()) {vec[i]->right = vec[loc];loc = loc + 1;}}return vec[0];}
};

在这里插入图片描述

3.套餐内商品的排列顺序

在这里插入图片描述

class Solution {
public:vector<string> goodsOrder(string goods) {dfs(goods, 0);return res;}
private:vector<string> res;void dfs(string& input, int loc) { // 注意这里传入的是 input 的引用if (loc == input.size() - 1) { // 当 loc 到达字符串末尾时res.push_back(input); // 将当前字符串加入结果集return;}set<char> st; // 用于去重for (int i = loc; i < input.size(); i++) {if (st.find(input[i]) != st.end()) continue; // 如果当前字符已经在当前位置之前出现过,则跳过st.insert(input[i]); // 将当前字符加入到集合中swap(input[i], input[loc]); // 将当前字符与位置 loc 的字符交换dfs(input, loc + 1); // 递归处理下一个位置swap(input[i], input[loc]); // 恢复交换之前的状态,进行下一次尝试}}
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024041702-计算机操作系统 - 死锁

计算机操作系统 - 死锁 计算机操作系统 - 死锁 必要条件处理方法鸵鸟策略死锁检测与死锁恢复 1. 每种类型一个资源的死锁检测2. 每种类型多个资源的死锁检测3. 死锁恢复 死锁预防 1. 破坏互斥条件2. 破坏占有和等待条件3. 破坏不可抢占条件4. 破坏环路等待 死锁避免 1. 安全状态…

Linux进程——Linux进程间切换与命令行参数

前言&#xff1a;在上一篇了解完进程状态后&#xff0c;我们简单了解了进程优先级&#xff0c;然后遗留了一点内容&#xff0c;本篇我们就来研究进程间的切换&#xff0c;来理解上篇提到的并发。如果对进程优先级还有没理解的地方可以先阅读&#xff1a; Linux进程优先级 本篇…

创建和管理数据库

1. 一条数据的存储过程 存储数据是处理数据的第一步.只有正确的把数据存储起来&#xff0c;我们才能进行有效的处理和分析.否则&#xff0c;只能是一团乱麻.在MySQL中&#xff0c;一个完整的数据存储过程一共有四步 : 创建数据库&#xff0c;确认字段&#xff0c;创建数据表&a…

新火种AI|马斯克聘用OpenAI泄密者,他们的梁子着实越结越深...

作者&#xff1a;小岩 编辑&#xff1a;彩云 就在最近&#xff0c;昔日就职于OpenAI的工程师Pavel Izmailov正式加入了马斯克的AI团队&#xff0c;他还在自己的推特上大张旗鼓的做着宣传&#xff1a;研究院xai。 AI工程师的跳槽本不值得惊讶&#xff0c;但Pavel的跳槽却在行…

C数据结构:栈

目录 栈的作用 栈的实现 栈的数据结构 栈的初始化 栈的销毁 栈的插入 栈的删除 获得栈顶元素 获得栈有效元素个数 判断栈是否为空 栈的使用 完整代码 栈是一种特殊结构的线性表 先来看看栈的图 之所以说它特殊&#xff0c;是因为它的插入删除功能比较特殊 栈的插…

书单 | 6本AI领域名家名作,大模型时代,趁风而起!

–文末赠书– 大模型时代&#xff0c;想抓住风口吗&#xff1f; 本期书单就来分享6本AI领域名家名作&#xff0c;给大家把大模型时代那些事儿讲清楚&#xff01; 放心&#xff0c;入门的同学也可以从最基础的学起~~ 快来看看有哪些书吧…… 01 ▊《多模态大模型&#xff1…

全栈开发之路——前端篇(5)组件间通讯和接口等知识补充

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 辅助文档&…

免费试用Gemini 1.5 Pro

https://aistudio.google.com/app/prompts/new_chat 人工智能学习网站 https://chat.xutongbao.top

如果出现一个工具,可以让前端开发彻底不用再手写UI,这个工具意义大吗?干货!

求这样的一个工具&#xff0c;可以让后端开发、嵌入式开发、产品经理、UI设计师都能用&#xff0c;注意&#xff0c;不是在一个简单的静态页生成&#xff0c;也不是类似飞冰那种 generator &#xff0c;而是真正让设计师和开发者在各自的那侧达成自治&#xff0c;可以做到吗&am…

The 2024 International Collegiate Programming Contest in Hubei Province, China

目录 H. Genshin Impact Startup Forbidden III K. Points on the Number Axis B I. Colorful Tree 估计还会补D&#xff0c;I不补了&#xff0c;补不动了 H. Genshin Impact Startup Forbidden III 对于一个有鱼的池塘&#xff0c;有周围与自己本身五个关键位置可以捕获当…

大模型微调之 在亚马逊AWS上实战LlaMA案例(三)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;三&#xff09; 使用 QLoRA 增强语言模型&#xff1a;Amazon SageMaker 上 LLaMA 2 的高效微调 语言模型在自然语言处理任务中发挥着关键作用&#xff0c;但训练和微调大型模型可能会占用大量内存且耗时。在本文中&…

『ZJUBCA Collaboration』WTF Academy 赞助支持

非常荣幸宣布&#xff0c;浙江大学区块链协会收到WTF Academy的赞助与支持&#xff0c;未来将共同开展更多深度合作。 WTF Academy是开发者的Web3开源大学&#xff0c;旨在通过开源教育让100,000名开发者进入到Web3。截止目前&#xff0c;WTF开源教程在GitHub收获超15,000 ⭐&a…