博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#剑指offer Day5 # 分享两个题的其他解法
阅读量:3963 次
发布时间:2019-05-24

本文共 1707 字,大约阅读时间需要 5 分钟。

1. 栈的弹入、弹出序列

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

分析:要注意,千万别理解错了。别错误的认为,就一个栈,先进后出,我一下子全push进去,然后一下子全部pop出来!比如我push序列是1,2,3,4,5,那么我pop序列一定是 5,4,3,2,1。正确的理解应该是:可以先push几个进去,pop几个,然后再push几个,再继续pop,只要总的push序列是1,2,3,4,5,总的pop序列是想要的答案即可。

然后思考:我们需要一个辅助栈,帮助存储中间过程。pop的序列即为辅助栈的序列。所以,最后的终止条件是,如果辅助栈空了,说明pop序列是对的,要是辅助栈还有数字还有pop完,那就说明不是一个pop序列。思路如下:我们一直往辅助栈里面push pushV里面的元素,直到push到辅助栈的top()与popV的第一个元素相等,那就说明该pop了,这时候执行辅助栈的pop()即可,然后序列号加1,迭代计算后面的值。

代码如下:

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

2. 从上到下打印二叉树

题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

分析:这题考查层序遍历!我们没有通用模板函数,所以只能自己构造。题目让我们从左到右,从上到下打印节点值,我们需要一个先入先出的数据结构,即queue。我们先把告诉根节点应该怎么做,然后按照我们之前提到的二叉树模板,左右递归即可。

那么根节点需要把自己的值push到vector中,然后pop,要保证每次front的值都是更新的!然后检查左右子树即可,比如说左子树,若是有左子树,即把左子树的结点push到队列中,然后检查到队列不为空,又会重复上面根节点的步骤。

代码如下:

vector
PrintFromTopToBottom(TreeNode* root) { if(root == nullptr) return {} queue
q; q.push(root); TreeNode* node = nullptr; vector
ans; while(!q.empty()){ node = q.front(); ans.push(node -> val); q.pop(); if(node -> left) q.push(q->left); if(node -> right) q.push(q->right); } return ans;}

剑指offer第21,22 题

转载地址:http://hmwki.baihongyu.com/

你可能感兴趣的文章
Spring 嵌套注入
查看>>
Spring 注入其他对象
查看>>
Spring 注入不同作用域对象
查看>>
Spring 自动依赖注入
查看>>
Spring 自动依赖注入优化(qualifier)
查看>>
Spring 自动依赖注入优化(autowire-candidate)
查看>>
Spring 继承 bean 声明
查看>>
Spring 区分环境
查看>>
Spring SpEL 表达式
查看>>
Spring 配置数据库动态密码
查看>>
Spring 申明式事务之注解
查看>>
Spring 申明式事务之XML模式
查看>>
Spring 程序式事务管理
查看>>
Spring JdbcTemplate
查看>>
Spring NamedParameterJdbcTemplate
查看>>
JMS + ActiveMQ 精萃
查看>>
ActiveMQ 下载和安装
查看>>
JMS 点对点消息
查看>>
JMS 发布/订阅消息 -- 同步
查看>>
正则表达式精萃
查看>>