网站 成功因素南京十大广告公司

web/2025/10/4 2:48:28/文章来源:
网站 成功因素,南京十大广告公司,网站换一个图片怎么做,免费下载的网页模板一、根据二叉树创建字符串 思路#xff1a;在正常前序递归遍历的基础上#xff0c;单独加上一个考虑到右子树为空的情况#xff0c;如下#xff1a;其结果为 1#xff08;2#xff08;4#xff08;5#xff09;#xff08;6#xff09;#xff09;#xff09;…一、根据二叉树创建字符串 思路在正常前序递归遍历的基础上单独加上一个考虑到右子树为空的情况如下其结果为 12456当遍历到节点2时由于2的左节点不为空右节点为空我们应该先打印根节点然后打印左子树。 class Solution { public:string tree2str(TreeNode* root) {if(root nullptr) return ;if(root-left nullptr root-right nullptr) return to_string(root-val);if(root-right nullptr) return to_string(root-val) ( tree2str(root-left) );return to_string(root-val) ( tree2str(root-left) )( tree2str(root-right) );} }; 二、二叉树的层序遍历 思路 方法一BFS       用队列来写把每一层入队列出队列的第一个头节点然后把头节点所连节点加入队列中然后循环往复直到队列没有元素 方法二DFS       定义一个kans[k]表示每层的节点数组。 方法一 BFS class Solution { public:vectorvectorint levelOrder(TreeNode* root) {vectorvectorint vv;if(root NULL) return vv;queueTreeNode* q;q.push(root);while(!q.empty()){vectorint v;int size q.size();while(size--){TreeNode* node q.front();q.pop();v.emplace_back(node-val);if(node-left) q.push(node-left);if(node-right) q.push(node-right);}vv.push_back(v);}return vv;} }; 方法二DFS class Solution { public:void dfs(TreeNode* root, int k, vectorvectorint ans){if (root NULL) return;if (k ans.size()) ans.push_back(vectorint());ans[k].push_back(root-val);dfs(root-left, k 1, ans);dfs(root-right, k 1, ans);}vectorvectorint levelOrder(TreeNode* root) {vectorvectorint ans;dfs(root, 0, ans);return ans; } }; 三、二叉树的层序遍历II 思路       这道题要求从下到上输出每一层的节点值只要在层序遍历I稍作修改即可在遍历完一层节点之后将存储该层节点值的列表添加到结果列表的头部。 方法一、BFS class Solution { public:vectorvectorint levelOrderBottom(TreeNode* root) {vectorvectorint vv;if(root nullptr) return vv;queueTreeNode* q;q.push(root);while(!q.empty()){vectorint v;int n q.size(); //每一层的节点while(n--){TreeNode* Node q.front();q.pop();v.push_back(Node-val);if(Node-left) q.push(Node-left);if(Node-right) q.push(Node-right);}vv.push_back(v);}reverse(vv.begin(),vv.end());return vv;} }; 方法二DFS class Solution { public:void dfs(TreeNode* root, int k, vectorvectorint ans){if (root NULL) return;if (k ans.size()) ans.push_back(vectorint());ans[k].push_back(root-val);dfs(root-left, k 1, ans);dfs(root-right, k 1, ans);}vectorvectorint levelOrderBottom(TreeNode* root) {vectorvectorint ans;dfs(root, 0, ans);reverse(ans.begin(), ans.end());return ans;} }; 四、二叉树最近公共祖先 思路    两个节点 p,q 分为两种情况           1、 p 和 q 在相同子树           2、p 和 q 在不同子树    从根节点遍历递归向左右子树查询节点信息。    递归终止条件如果当前节点为空或等于 p 或 q则返回当前节点    递归遍历左右子树如果左右子树查到节点都不为空则表明 p 和 q 分别在左右子树中因此当前节点即为最近公共祖先    如果左右子树其中一个不为空则返回非空节点。 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root NULL || root p || root q) return root;TreeNode* l lowestCommonAncestor(root-left, p, q); //若在左子树则不为空TreeNode* r lowestCommonAncestor(root-right, p, q); //若在右子树则不为空if(l r) return root; //不在同一棵子树return l ? l : r; //在同一棵子树则返回子树的根节点即 p 或者 q} }; 五、二叉搜索树和双向链表 思路 1、已知将二叉搜索树进行中序遍历可以得到由小到大的顺序排列因此本题最直接的想法就是进行中序遍历。 2、将中序遍历的结果用数组存储下来得到的数组是有从小到大顺序的。最后将数组中的结点依次连接即可。 3、但是根据题目的要求1不能创建新的结点而上述方法的数组中存储的其实是结点并不满足题意所以需要在中序遍历的过程中直接对结点的指针进行调整。4、调整的思路如下 1使用一个指针preNode指向当前结点root的前继。例如上述图中root为指向10的时候preNode指向8 2对于当前结点root有root-left要指向前继preNode中序遍历时对于当前结点root其左孩子已经遍历完成了此时root-left可以被修改。同时preNode-right要指向当前结点当前结点是preNode的后继此时对于preNode结点它已经完全加入双向链表。 class Solution { public:TreeNode* preNode; //前继节点TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree nullptr) return pRootOfTree;TreeNode* p pRootOfTree;while(p-left) p p-left; //找到双向链表的开头。Inorder(pRootOfTree);return p;}void Inorder(TreeNode* root){if(root nullptr) return;Inorder(root-left);root-left preNode;if(preNode) preNode-right root;preNode root;//更新preNode指向当前结点作为下一个结点的前继。Inorder(root-right);} }; 六、从前序遍历和中序遍历序列构建二叉树 思路 由于前序遍历的性质可知其第一个节点为根节点然后我们通过该根节点再将中序遍历结果分开再来找节点如下图所示 DFS解法 class Solution { private:unordered_mapint, int pos;public:TreeNode* dfs(const vectorint preorder, const vectorint inorder, int pl, int pr, int il, int ir) {if (pl pr) return nullptr;// 前序遍历中的第一个节点就是根节点int k pos[preorder[pl]]; // 在中序遍历中定位根节点// 先把根节点建立出来TreeNode* root new TreeNode(preorder[pl]);int len k - il;// 得到左子树中的节点数目// 递归地构造左子树并连接到根节点// 先序遍历中「从 左边界1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素root-left dfs(preorder, inorder, pl 1, pl len, il, k - 1);// 递归地构造右子树并连接到根节点// 先序遍历中「从 左边界1左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位1 到 右边界」的元素root-right dfs(preorder, inorder, pl len 1, pr, k 1, ir);return root;}TreeNode* buildTree(vectorint preorder, vectorint inorder) {int n preorder.size();// 构造哈希映射帮助我们快速定位根节点for (int i 0; i n; i) {pos[inorder[i]] i;}return dfs(preorder, inorder, 0, n - 1, 0, n - 1);} }; 七、从中序和后序遍历序列构建二叉树 和上面代码思路差不多 class Solution { public:unordered_mapint, int pos;TreeNode* dfs(vectorint inorder, vectorint postorder, int il, int ir, int pl, int pr){if(il ir) return nullptr; //递归截止int k pos[postorder[pr]]; //中序遍历确立根位置TreeNode* root new TreeNode(postorder[pr]); //创立根节点root-left dfs(inorder, postorder, il, k - 1, pl, pl k - 1 - il);root-right dfs(inorder, postorder, k 1, ir, pl k - il, pr - 1);return root; }TreeNode* buildTree(vectorint inorder, vectorint postorder) {int n inorder.size();for(int i 0; i n; i){pos[inorder[i]] i; //标记二叉树祖先遍历结果所对应下标}return dfs(inorder, postorder, 0, n - 1, 0 , n - 1);} }; 八、前序遍历非递归 给你二叉树的根节点 root 返回它节点值的 前序 遍历。 class Solution { public:vectorint preorderTraversal(TreeNode* root) {vectorint ans;if(root nullptr) return ans;stackTreeNode* st;TreeNode* node root;while(!st.empty() || node ! nullptr){while(node!nullptr) {ans.push_back(node-val);st.push(node);nodenode-left;}node st.top();st.pop();node node-right;}return ans;} }; 九、中序遍历非递归 给定一个二叉树的根节点 root 返回 它的 中序 遍历 class Solution { public:vectorint inorderTraversal(TreeNode* root) {vectorint ans;stackTreeNode* s;while(root ! nullptr || !s.empty()){while(root ! nullptr){s.push(root);root root-left;}root s.top(); //取出第一个元素s.pop();ans.push_back(root-val);root root - right;}return ans;} }; 十、后序遍历非递归 class Solution { public:vectorint postorderTraversal(TreeNode* root) {vectorint ans;stackTreeNode* s;TreeNode* pre nullptr;while(root ! nullptr || !s.empty()){while(root ! nullptr){s.push(root);root root-left;}root s.top(); //取出第一个元素s.pop();if (root-right nullptr || root-right pre) {ans.push_back(root-val);pre root;root nullptr;} else {s.push(root);root root-right;}}return ans;} };

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

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

相关文章

杭州电商网站建设公司青海省建设厅网站

不知道大家在写代码的时候,摸不摸鱼,是不是时不时得打开一下微博,看看今天发生了什么大事,又有谁塌房,而你没有及时赶上。 为此,我决定开发一个vscode插件,来查看微博热搜 插件名称&#xff1…

坪山网站建设渠道不备案如何架设网站

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

佛山 网站建设安装wordpress主题失败

文章目录 前言一、鼠标点击的角度测量二、二维码条形码识别 前言 一、鼠标点击的角度测量 首先导入一个带有角度的照片 然后下面的代码注册了一个鼠标按下的回调函数, 还有一个点的数列,鼠标事件为按下的时候就记录点,并画出点,…

济南网站优化收费怎么做网站demo

爆破音 true [t],发真实的 t。 单词的开始处重读音节的开始处,且前面没有跟着清辅音 [s] held 住不发声 叫法很多,声门塞音、吞音、喉塞(s)音、stop [t],held [t],不爆破的 [t]。 发音的口…

wordpress问答模块怎么做网络推广优化

目录 一、动态语言 二、创建C#dll 1.VS中创建一个C#语言的库工程 2.添加UnityEngine.dll的依赖 3.编写代码,生成dll 三、Unity使用dll 一、动态语言 计算机编程语言可以根据它们如何将源代码转换为可以执行的代码来分类为静态语言和动态语言。 静态语言&…

google网站增加关键词百度线上推广

# 首先在保证php已经正确安装的情况下:# 安装jdk(本人安装jdk7) 和 scala 因为kafka基于scala开发# 之后解压安装包 进入 运行命令 ./gradlew jar # 会下载一些包 # 首先运行 zookeeper ./bin/zookeeper-server-start.sh ./config/zookeeper.properties# 之后运行k…

南昌网站建设冲浪者网站移动端

程序是基于Matlab2016a,工具箱版本为Robotic Toolbox 10.2 参考博客: MATLAB机器人工具箱使用 Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划 六轴机器人建模方法、正逆解、轨迹规划实例与Matalb Robotic Toolbox 的实现 效果&#xff1a…

北京国贸网站建设公司小红书如何引流推广

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…

怎样创建购物网站东莞设计网站推荐

grpc 流式传输下载各种文件(文本或二进制文件)是每个企业应用程序的生死攸关的事情。 PDF文档,附件,媒体,可执行文件,CSV,超大文件等。几乎每个应用程序迟早都必须提供某种形式的下载。 下载是通…

怎么样网站建设温州cms建站系统

一、进程与线程 认识 程序由指令和数据组成,简单来说,进程可以视为程序的一个实例 大部分程序可以同时运行多个实例进程,例如记事本、画图、浏览器等少部分程序只能同时运行一个实例进程,例如QQ音乐、网易云音乐等 一个进程可以…

做网站学什么软件雨花区最新情况

javafx 调用接口作为UI框架开发人员,提供自定义控件外观和行为的方法是我工作的一部分。 在许多情况下,这是通过允许框架用户在控件上注册工厂来完成的。 过去,我会为此创建一个工厂接口,并在框架内提供一个或多个默认实现。 这些…

一个网站的构建网站seo优化有哪些方面

htmlcss前端作业 王者荣耀官网6个页面无js 下载地址 https://download.csdn.net/download/qq_42431718/89571150 目录1 目录2 项目视频 王者荣耀6个页面(无js) 页面1 页面2 页面3 页面4 页面5 页面6

深圳网站制作开发排名国家世界新闻

前言文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在six-finger-web一个Web后端框架的轮子从处理Http请求【基于Netty的请求级Web服务器】 到mvc【接口封装转发)】,再…

电子商务网站建设的规章制度wordpress 主题选项

前言 字符串学了三天,七道题。初窥kmp,已经感受到算法的博大精深了。 内容 对字符串的操作可以归结为以下几类: 字符串的比较、连接操作(不同编程语言实现方式有所不同); 涉及子串的操作,比…

大型网站建设兴田德润优惠奢侈品回收

2023. 连接后等于目标字符串的字符串对 给你一个 数字 字符串数组 nums 和一个 数字 字符串 target ,请你返回 nums[i] nums[j] (两个字符串连接)结果等于 target 的下标 (i, j) (需满足 i ! j)的数目。 示例 1&…

营销企业网站制作php网站欣赏

HALCON 快速入门手册 1 什么是 HALCON HALCON 是德国 MVtec 公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛 的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON 灵活的 架构便于机器视觉,医学图像和图像分析应…

网站建设推广关键词百度有专做优化的没

短视频运营是一种通过策划、执行和管理短视频内容以达到品牌目标的一项工作。在如今面临信息爆炸的时代,短视频已经成为了吸引用户注意力的一种重要方式。作为一种新兴媒体形式,短视频拥有跨时空、生动有趣、内容丰富的特点,因此得到了越来越…

哪个网站做ic外单好网站改版对排名的影响

random模块的作用是产生随机数。 import random num random.randint(1,100) random.randint(a, b)可以生成一个a到b间的随机整数,包括a和b。 a、b都必须是整数,且必须b≥a。当等于的时候,比如: random.randint(3, 3) 的结果就永远…

网站正在建设中的英文企业网站建设合同书标准版

今日尝试配通俩个C8T6单片机之间的无线串口通信,文章提供原理,源码,测试效果图,测试工程下载: 目录 传输不规范问题: 串口通信资源: 单个串口资源理解: 单片机串口资源&#xf…

福建省品牌建设促进会网站wordpress 安全加固

1. DRF QuerySet 和 Instance功能概述 1.1 QuerySet 从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类:Manager、QuerySet、Model。每个Model都有一个默认的 manager实例,名为objects。Django的ORM通过Mode的objects属性提供各种数据…