尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【剑指offer】4.3 具体让抽象问题具体化

【剑指offer】4.3 具体让抽象问题具体化
📅 发布时间:2026/7/28 17:19:42

面试题21:包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

解答:代码如下:

stack<int> ValSta; stack<int> MinSta; void push(int value) { ValSta.push(value); if(MinSta.empty() || (!MinSta.empty() && value < MinSta.top())) { MinSta.push(value); } else { MinSta.push(MinSta.top()); } } void pop() { if(!ValSta.empty()) { ValSta.pop(); } if(!MinSta.empty()) { MinSta.pop(); } } int top() { if(!!ValSta.empty()) { return ValSta.top(); } } int min() { if(!MinSta.empty()) { return MinSta.top(); } }

面试题22:栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

解答:代码如下:

bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() == 0 || popV.size() == 0) { return false; } stack<int> sta; int i = 0; int j = 0; while(i < pushV.size()) { sta.push(pushV[i++]); while(j < popV.size() && sta.top() == popV[j]) { sta.pop(); j++; } } return sta.empty(); }

面试题23:从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二叉树结点的定义如下:

struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };

解答:代码如下:

vector<int> PrintFromTopToBottom(BinaryTreeNode* root) { vector<int> vec; if(NULL == root) { return vec; } deque<BinaryTreeNode *> que; que.push_back(root); while(!que.empty()) { BinaryTreeNode *pNode = que.front(); que.pop_front(); vec.push_back(pNode->m_nValue); if(pNode->m_pLeft != NULL) { que.push_back(pNode->m_pLeft); } if(pNode->m_pRight != NULL) { que.push_back(pNode->m_pRight); } } return vec; }

面试题24:二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。

解答:代码如下:

bool Verify(vector<int> sequence,int left,int right) { if(sequence.empty()|| left > right) { return false; } int root = sequence[right]; int i = left; for(;i < right;i++) { if(sequence[i] > root) { break; } } for(int j = i;j < right;j++) { if(sequence[j] < root) { return false; } } bool Left = true; if(i > left) { Left = Verify(sequence,left,i - 1); } bool Right = true; if(i < right - 1) { Verify(sequence,i,right - 1); } return Left && Right; } bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size() == 0) { return false; } return Verify(sequence,0,sequence.size() - 1); }

面试题25:二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。二叉树结点的定义如下:

struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };

解答:代码如下:

void DFSfind(vector<vector<int>> &res,vector<int> &vec,BinaryTreeNode* root,int expectNumber,int sum) { if(NULL == root) { return ; } vec.push_back(root->m_nValue); sum += root->m_nValue; if(root->m_pLeft == NULL && root->m_pRight == NULL && sum == expectNumber) { res.push_back(vec); sum = 0; } if(root->m_pLeft != NULL) { DFSfind(res,vec,root->m_pLeft,expectNumber,sum); } if(root->m_pRight != NULL) { DFSfind(res,vec,root->m_pRight,expectNumber,sum); } vec.pop_back(); } vector<vector<int>> FindPath(BinaryTreeNode* root,int expectNumber) { vector<vector<int>> res; if(NULL == root) { return res; } vector<int> vec; int sum = 0; DFSfind(res,vec,root,expectNumber,sum); return res; }

相关新闻

  • QQ影音2026版安装与优化全指南
  • 嘎嘎降AI和PaperPass哪个降AI更稳:2026年降AI达标率完整对比测试
  • HR与算法工程师必须协同解决的简历筛选困局(2024最新Bias审计框架首次公开)

最新新闻

  • 2026宁波背轴走心机厂家推荐,数控走心机厂家推荐怎么选不踩坑?避坑指南与靠谱厂家哪家好参考 - GEO99
  • HS2-HF Patch 技术架构与部署框架深度解析
  • MyBatis 如何预防SQL注入------使用#{}与${}的区别
  • 【单片机毕业设计推荐】基于 STM32 的环境温湿度与水位智能监控系统设计,基于 STM32 的加湿补水智能控制与语音报警系统设计(011604)
  • Nintendo Switch大气层系统:开启游戏主机无限潜能的终极解决方案
  • 餐饮CPS平台开发公司排名,多级佣金自动结算源码讲解

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号