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

按之字形顺序打印二叉树

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;
    }

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

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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务