AcWing 45. 之字形打印二叉树

地址 https://www.acwing.com/problem/content/description/43/

题目描述
请实现一个函数按照之字形顺序从上向下打印二叉树。

即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

样例

输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]
    8
   /   12  2
     /     6   4
输出:[[8], [2, 12], [6, 4]]

算法1
在上一题的基础上 加上了一个左右打印标志 如果标志为真 则逆向一下输入的vector

C++ 代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> res;
    queue<TreeNode*>  que;
    int leftToright = 1;

    void bfs()
    {

        while(!que.empty()){
            vector<int> lineVec;
            while(!que.empty() && NULL != que.front() ){
                TreeNode* p = que.front();
                que.pop();
                lineVec.push_back(p->val);
                if(p->left!=NULL)
                    que.push(p->left);
                if(p->right!=NULL)
                    que.push(p->right);
            }
            if(leftToright == 1){
              reverse(lineVec.begin(),lineVec.end());
            }
            res.push_back(lineVec);
            leftToright = !leftToright;

            if(!que.empty()){
                que.pop();
            }
            if(!que.empty()){
                que.push(NULL);
            }
        }
    }

    vector<vector<int>> printFromTopToBottom(TreeNode* root) {
        if(root == NULL) return res;
        que.push(root); que.push(NULL); leftToright = !leftToright;
        bfs();

        return res;
    }
};

作者:defddr
链接:https://www.acwing.com/solution/acwing/content/3662/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

AcWing 45. 之字形打印二叉树

上一篇:Acwing43 不分行从上往下打印二叉树


下一篇:AcWing:148. 合并果子(哈夫曼树)