按之字形顺序打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。、
 
解题思路:
使用两个栈来存放从左向右或者从右向左的每层节点,然后使用变量记录层级。
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;
    }
};

  

posted @ 2019-04-13 15:55  tcgoshawk  阅读(95)  评论(0编辑  收藏  举报