题目描述

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

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。