题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路
对二叉树进行广度遍历,用一个队列实现。
注意C++中队列的用法
1.queue<TreeNode*> q;
q.push(a)
q.front()
q.pop()
2.
vector<int> que; 无论是 vector<int> vec、queue<int> que、stack<int> st 只用声明不用在去new。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> que;
queue<TreeNode*> q;
TreeNode* fr;
if(root == NULL) return que;
q.push(root);
while(!q.empty()){
fr = q.front();
que.push_back(fr->val);
if(fr->left!=NULL){
q.push(fr->left);
}
if(fr->right!=NULL){
q.push(fr->right);
}
q.pop();
}
return que;
}
};