重建二叉树
时间限制:1秒
空间限制:32768K
本题知识点:队列
栈
题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
}
public int pop() {
}
}
思路分析:
操作情况依次经历下述变化:
- 两栈都空
- -> stack1不空 stack2空
- -> stack1空 stack2不空
- -> 两栈都不空
两栈都空
两栈都空 | stack1=[] | stack2=[] | 操作步骤 |
---|---|---|---|
入栈 {1, 2} | stack1=[2, 1] | stack2=[] | 2 * stack1.push |
出栈 | stack1=[] | stack2=[] | return null |
stack1不空 stack2空
1不空 2空 | stack1=[2, 1] | stack2=[] | 操作步骤 |
---|---|---|---|
入栈 {3, 4} | stack1=[4, 3, 2, 1] | stack2=[] | 2 * stack1.push |
出栈 | stack1=[] | stack2=[2, 3, 4] | 4 * stack1.pop 4 * stack2.push return stack2.pop |
stack1空 stack2不空
1空 2不空 | stack1=[] | stack2=[2, 3, 4] | 操作步骤 |
---|---|---|---|
入栈 {5, 6} | stack1=[6, 5] | stack2=[2, 3, 4] | 2 * stack1.push |
出栈 | stack1=[] | stack2=[3, 4] | return stack2.pop |
两栈都不空
两栈不空 | stack1=[6, 5] | stack2=[2, 3, 4] | 操作步骤 |
---|---|---|---|
入栈 {7, 8} | stack1=[8, 7, 6, 5] | stack2=[2, 3, 4] | 2 * stack1.push |
出栈 | stack1=[6, 5] | stack2=[3, 4] | return stack2.pop |
小结:
- 入栈情况:总是 stack1.push
- 出栈情况:
- stack2 为空:将所有 stack1 元素入栈到 stack2,再执行 stack2.pop
- stack2 不空:stack2.pop
解答:
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
// 若 stack2 为空:将所有 stack1 元素入栈到 stack2
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
原文地址:https://www.cnblogs.com/jianminglin/p/11291789.html
时间: 2024-10-09 03:47:27