剑指offer | 训练题58:按之字形打印二叉树

来源:互联网 发布:手机用usb使用电脑网络 编辑:程序博客网 时间:2024/05/18 02:28

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路

/** * 思路:BFS,新建一个队列,将每一层放进队列里循环读出,按照单数层和双数层决定要不要翻转vector *//*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>> ans;        if (pRoot == nullptr)            return ans;        queue<TreeNode*> q;        int level = 0;        q.push(pRoot);        while (!q.empty()) {            int size = q.size();            vector<int> levelelem;            level++;            while (size--) {                TreeNode* t = q.front();                q.pop();                levelelem.push_back(t->val);                if (t->left != nullptr)                    q.push(t->left);                if (t->right!= nullptr)                    q.push(t->right);            }             if (level%2!=0)                    ans.push_back(levelelem);                else {                    reverse(levelelem.begin(),levelelem.end());                    ans.push_back(levelelem);                }         }        return ans;    }};