【复习30-35题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十一天 21/50

专注 效率 记忆
预习 笔记 复习 做题

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
 
文章字体风格:
红色文字表示:重难点★✔
蓝色文字表示:思路以及想法★✔
 
如果大家觉得有帮助的话,感谢大家帮忙
点赞!收藏!转发!

本博客带大家一起学习,我们不图快,只求稳扎稳打。
由于我高三是在家自学的,经验教训告诉我,学习一定要长期积累,并且复习,所以我推出此系列。
只求每天坚持40分钟,一周学5天,复习2天
也就是一周学10道题
50天后我们就可以学完76道题,相信50天后,我们一定可以有扎实的代码基础!我们每天就40分钟,和我一起坚持下去吧!
qq群:866984458

本题出自 acwing网站
这个系列是免费的
打卡即刻退回费用。

第二十一天【剑指Offer例题代码 系列】

    • 30. 栈的压入、弹出序列
    • 31. 不分行从上往下打印二叉树( 层序遍历二叉树bfs )
    • 32. 分行从上往下打印二叉树( 利用两个队列遍历 )
    • 33. 之字形打印二叉树
    • 34. 二叉搜索树的后序遍历序列
        • 考点:根据二叉搜索树的后序遍历的特点
    • 35. 二叉树中和为某一值的路径( dfs回溯 )
        • 注意:只能是根节点到叶子节点

30. 栈的压入、弹出序列

原题链接

在这里插入图片描述

class Solution {
public:bool isPopOrder(vector<int> pushV,vector<int> popV) {if(popV.size() != pushV.size()){return false;}if(pushV.size()==0 && popV.size()==0)return true;stack<int> st;for(int i = 0,j = 0; i < popV.size(); i++){if(popV[j]!=pushV[i]){st.push(pushV[i]);}else{st.push(pushV[i]);while(st.size() && j < popV.size() && st.top() == popV[j]){st.pop();j++;}}}if(st.size()==0)return true;return false;}
};

31. 不分行从上往下打印二叉树( 层序遍历二叉树bfs )

原题链接

在这里插入图片描述

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> printFromTopToBottom(TreeNode* root) {vector<int> ans;if(root==NULL)return ans;queue<TreeNode*> q;q.push(root);while(q.size()){auto t = q.front();q.pop();ans.push_back(t->val);if(t->left != NULL)q.push(t->left);if(t->right != NULL)q.push(t->right);}return ans;}
};

32. 分行从上往下打印二叉树( 利用两个队列遍历 )

原题链接

在这里插入图片描述
在这里插入图片描述

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> get_val(vector<TreeNode*> level){vector<int> res;for (auto &u : level)res.push_back(u->val);return res;}vector<vector<int>> printFromTopToBottom(TreeNode* root) {vector<vector<int>>res;if (!root) return res;vector<TreeNode*>level;level.push_back(root);res.push_back(get_val(level));while (true){vector<TreeNode*> newLevel;for (auto &u : level){if (u->left) newLevel.push_back(u->left);if (u->right) newLevel.push_back(u->right);}if (newLevel.size()){res.push_back(get_val(newLevel));level = newLevel;}else break;}return res;}
};

33. 之字形打印二叉树

原题链接
在这里插入图片描述
本题和上一道题差不多
就是需要定义一个变量
判断是否需要翻转

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> get_val(vector<TreeNode*> level){vector<int> res;for (auto &u : level)res.push_back(u->val);return res;}vector<vector<int>> printFromTopToBottom(TreeNode* root) {vector<vector<int>>res;if (!root) return res;vector<TreeNode*>level;level.push_back(root);res.push_back(get_val(level));bool zigzag = true;while (true){vector<TreeNode*> newLevel;for (auto &u : level){if (u->left) newLevel.push_back(u->left);if (u->right) newLevel.push_back(u->right);}if (newLevel.size()){vector<int>temp = get_val(newLevel);if (zigzag)reverse(temp.begin(), temp.end());res.push_back(temp);level = newLevel;}else break;zigzag = !zigzag;}return res;}
};

34. 二叉搜索树的后序遍历序列

原题链接
在这里插入图片描述

考点:根据二叉搜索树的后序遍历的特点

由于是后序遍历,所以最后一个结点就是根节点,又因为是二叉搜索树,所以从第一个结点开始所有比它小的结点就是它的左子树,其他就是它的右子树。如果右子树有点不大于根节点的话就说明不是一棵二叉搜索树,返回false。最后递归处理左右子树。

class Solution {
public:vector<int> seq;//设成全局变量方便操作bool verifySequenceOfBST(vector<int> sequence) {seq = sequence;return dfs(0, seq.size() - 1);}bool dfs(int l, int r){//如果区间内啥也没有就说明把所有的结点都判断完了,却没有一个是有问题的,所以返回trueif (l >= r)return true;//取出根节点int root = seq[r];//找出所有从l开始连续的比根节点小的结点int k = l;while (k < r && seq[k] < root)k ++;//这时k就是右子树后序遍历中的第一个结点//如果不满足二叉搜索树的性质就返回falsefor (int i = k; i < r; i ++)if (seq[i] < root)return false;//递归处理左右子树//y总的视频里的代码是错的//他写的是return dfs(l, k - 1) && dfs(k + 1, r);//这样会WAreturn dfs(l, k - 1) && dfs(k, r - 1);}
};

35. 二叉树中和为某一值的路径( dfs回溯 )

注意:只能是根节点到叶子节点

原题链接
在这里插入图片描述
首先补充题意:本题要求的路径是根节点到叶子节点

本题就是一个dfs回溯问题

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<vector<int>> ans;vector<vector<int>> findPath(TreeNode* root, int sum) {vector<int> sup;dfs(root,sum,sup);return ans;}void dfs(TreeNode* root,int sum,vector<int>& sup){if(root == NULL)return;sum -= root->val;sup.push_back(root->val);if(root->left == NULL && root->right == NULL && sum == 0)ans.push_back(sup);dfs(root->left,sum,sup);dfs(root->right,sum,sup);sum += root->val;sup.pop_back();}};

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

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

相关文章

Paddle OCR 安装使用教程

文章目录 一、简介二、使用教程三、模型调用四、效果展示 一、简介 PaddleOCR是飞浆开源文字识别模型&#xff0c;最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别&#xff1b;支持倾斜、竖排等多种方向文字识别&#xff1b;支持GPU、CPU预测&#xff0c;并且…

阿里内部《Java工程师面试手册》火了,完整版 PDF 开放下载

前言 2023金九银十即将来临&#xff0c;很多同学会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考…

el-input输入框type=“number“时,禁止鼠标上下滑动改变数值

el-input输入框type"number"时&#xff0c;禁止鼠标上下滑动改变数值 解决方法&#xff1a;在el-input中添加属性设置 mousewheel.native.prevent

深度学习实例分割篇——Mask RCNN原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

Rust 第三天---内存管理与所有权

前面介绍了环境配置以及基础语法,掌握之后已经可以开始用Rust编写一些简单的程序了,今天就要来介绍一下Rust核心的功能—内存管理与所有权 1. 关于内存管理 无论什么高级语言必须考虑到的一点就是编写程序时对于内存的管理问题,更简单一点解释,利用编程语言能快速高效的分配内…

【零基础入门学习Python---Python中机器学习和人工智能之快速入门实践】

&#x1f680; 零基础入门学习Python&#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜…

GitHub Pages + Hexo

步骤 参考如下步骤&#xff1a;https://blog.csdn.net/yaorongke/article/details/119089190 出现的问题 1 Fluid主题 其更换Fluid主题时&#xff1a; 下载最新 release 版本 解压到 themes 目录&#xff0c;并将解压出的文件夹重命名为 fluid 按照上面执行后&#xff0c;后…

历史上的今天发生了什么事?华为日历带你“穿越”涨知识

探寻过去就会发现各种有趣的历史故事和知识值得细细品味&#xff0c;如果你想“穿越”过去&#xff0c;回顾历史上的今天曾经发生过的事件&#xff0c;或是以更轻松的方式增长历史知识&#xff0c;不妨试试订阅华为日历【历史上的今天】订阅服务。 无论是对历史一知半解的小白&…

基于PyQt5的桌面图像调试仿真平台开发(8)锐化

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

CTFSHOW 每周大挑战 RCE极限挑战

RCE挑战1 开题直接给了源码 过滤了括号和点号。 使用内敛绕过。 payload&#xff1a; codeecho tac /f1agaaa;RCE挑战2 源码直接给了。 基本把能用的都过滤了&#xff0c;只剩下$()_;[],./字符&#xff0c;自增RCE无疑。 //相当于 ($_GET[_])($_GET[__]) 使用的时候url编…

基于simulink使用二维规范化互相关进行模式匹配和目标跟踪(附源码)

一、前言 此示例演示如何使用二维规范化互相关进行模式匹配和目标跟踪。双击“编辑参数”块以选择要检测的类似目标的数量。您还可以更改金字塔因子。通过增加它&#xff0c;您可以更快地将目标模板与每个视频帧匹配。更改金字塔因子可能需要更改阈值。 此外&#xff0c;还可…

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

华为云流水线服务CodeArts Pipeline&#xff0c;旨在提升编排体验&#xff0c;开放插件平台&#xff0c;并提供标准化的DevOps企业治理模型&#xff0c;将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通…