题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

思路:
层序遍历,奇数层从左到右,偶数层从右到左打印
首先层序遍历,使用队列,每一层的结果存在qvec中,此时的qvec中每一层都是从左到右的,设定一个标志flag,表示层数,当flag是奇数时,直接将qvec给res;当flag为偶数时,将qvec的内容反转再给res。
注:由于我太菜,在反转的时候又加了一个栈进行反转,代码见50行注释掉的原始部分。实际上一个reverse函数就可以搞定。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {

        vector<vector<int>> res;
        queue<TreeNode*> Queue;
        Queue.push(pRoot);
        int flag = 0;

        if(!pRoot) return res;
        while(Queue.size() > 0)
        {
            vector<int> qvec;
            int size = Queue.size();
            while(size > 0)//层次遍历,qvec记录每层内容
            {
                TreeNode* node = Queue.front();
                Queue.pop();
                qvec.push_back(node->val);
                size--;
                if(node->left)
                {
                    Queue.push(node->left);
                }
                if(node->right)
                {
                    Queue.push(node->right);
                }
            }
            flag += 1;
            if(flag%2 && qvec.size()>0)//flag是奇数
            {
                res.push_back(qvec);
            }
            if(!(flag%2) && qvec.size()>0)//flag是偶数
            {
                //优化
                reverse(qvec.begin(), qvec.end());
                res.push_back(qvec);
                //原始
                /*stack<int> Stack;
                for(int i=0;i<qvec.size();++i)
                {
                    Stack.push(qvec[i]);
                }
                qvec.clear();
                while(Stack.size()>0)
                {
                    int tmp = Stack.top();
                    qvec.push_back(tmp);
                    Stack.pop();
                }
                res.push_back(qvec);*/
            }
        }
        return res;
    }

};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10999次浏览 94人参与
# 你的实习产出是真实的还是包装的? #
1943次浏览 42人参与
# 巨人网络春招 #
11361次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7628次浏览 43人参与
# 简历第一个项目做什么 #
31736次浏览 339人参与
# 重来一次,我还会选择这个专业吗 #
433536次浏览 3926人参与
# 米连集团26产品管培生项目 #
6027次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187191次浏览 1122人参与
# 牛客AI文生图 #
21445次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152441次浏览 888人参与
# 研究所笔面经互助 #
118960次浏览 577人参与
# 简历中的项目经历要怎么写? #
310349次浏览 4217人参与
# AI时代,哪些岗位最容易被淘汰 #
63803次浏览 826人参与
# 面试紧张时你会有什么表现? #
30509次浏览 188人参与
# 你今年的平均薪资是多少? #
213128次浏览 1039人参与
# 你怎么看待AI面试 #
180122次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76537次浏览 374人参与
# 我的求职精神状态 #
448121次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363503次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160672次浏览 1112人参与
# 校招笔试 #
471140次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务