剑指offer-59.按之字形顺序打印二叉树

来源:互联网 发布:淘宝服装店铺简介范文 编辑:程序博客网 时间:2024/06/06 04:00

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


思路:打印二叉树,层次二叉树,层次遍历,这时用一个队列进行辅助较好,但是题目又要求要逆序打印,这时用一个标志位可好?好,奇数不反转,偶数反转,嗯,好的,去实现吧,还是不懂,好吧,看下面吧


/*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*>que;        if (pRoot == NULL)            return res;        que.push(pRoot);        bool even = false;        while (!que.empty())        {            vector<int>vec;            int size = que.size();            for (int i = 0; i < size; i++)            {                TreeNode* temp = que.front(); //先保存,等一下就可能有用了                que.pop();                vec.push_back(temp->val);                if (temp->left != NULL)                    que.push(temp->left);                if (temp->right != NULL)                    que.push(temp->right);            }            //要进行反转判断了            if (even)                std::reverse(vec.begin(), vec.end());            res.push_back(vec);            even = !even;//单数不反转,双数反转        }        return res;            }    };


0 0
原创粉丝点击