按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。、
解题思路:
使用两个栈来存放从左向右或者从右向左的每层节点,然后使用变量记录层级。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > res;
if(pRoot == NULL) return res;
res.push_back(vector<int>(1, pRoot->val) );
stack<TreeNode*> stk1;
stack<TreeNode*> stk2;
stk1.push(pRoot);
int cnt = 1;
TreeNode * tmp = NULL;
while(!stk1.empty() || !stk2.empty()){
if(cnt % 2){
vector<int>levelVct;
while(!stk1.empty()){
tmp = stk1.top();
stk1.pop();
if(tmp->right != NULL){
stk2.push(tmp->right);
levelVct.push_back(tmp->right->val);
}
if(tmp->left != NULL){
stk2.push(tmp->left);
levelVct.push_back(tmp->left->val);
}
}
if(levelVct.size() != 0)
res.push_back(levelVct);
}else{
vector<int>levelVct;
while(!stk2.empty()){
tmp = stk2.top();
stk2.pop();
if(tmp->left != NULL){
stk1.push(tmp->left);
levelVct.push_back(tmp->left->val);
}
if(tmp->right != NULL){
stk1.push(tmp->right);
levelVct.push_back(tmp->right->val);
}
}
if(levelVct.size() != 0)
res.push_back(levelVct);
}
cnt++;
}
return res;
}
};
学学学 练练练 刷刷刷

浙公网安备 33010602011771号