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

来源:互联网 发布:随遇软件 编辑:程序博客网 时间:2024/05/22 04:30

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

思路:典型的层次遍历,但是要按之字形打印,所以遍历的时候要分奇偶层,则要在遍历里稍微改动一下,一次要遍历一层,而不是一次只遍历一个结点。

代码:

/*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> >vec;        if(pRoot==nullptr)  return vec;        queue<TreeNode*>Q;        Q.push(pRoot);        vector<int>vec1;        vec1.push_back(pRoot->val);        vec.push_back(vec1);        int layer = 2;        while(!Q.empty())        {            int size = Q.size();            vec1.clear();            for(int i=0;i<size;i++)            {                TreeNode* tmp = Q.front();                if(tmp->left)                {                    vec1.push_back(tmp->left->val);                    Q.push(tmp->left);                }                if(tmp->right)                {                     vec1.push_back(tmp->right->val);                     Q.push(tmp->right);                }                Q.pop();            }            if(layer%2==0)   reverse(vec1.begin(),vec1.end());            if(vec1.size()>0)  vec.push_back(vec1);            ++layer;        }        return vec;    }};
原创粉丝点击