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

题目描述

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

代码:

class Solution {
public:
    vector<vector<int> > Print(TreeNode* root) {
        vector<vector<int> >ans;
        if(root==NULL)return ans;
        int flag=1;//标志奇偶行
        queue<TreeNode*>q;
        q.push(root);
        while(!q.empty()){
            queue<TreeNode*>qt;
            vector<int>res;
            while(!q.empty()){
                TreeNode*t=q.front();q.pop();
                res.push_back(t->val);
                if(t->left)qt.push(t->left);
                if(t->right)qt.push(t->right);
            }
            if(flag<0){//偶数行逆置
                int len=res.size();
                for(int i=0;i<len/2;i++)
                    swap(res[i],res[len-1-i]);
            }
            ans.push_back(res);
            flag=-flag;
            q=qt;
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42130471/article/details/80710231
今日推荐