AcWing 45. 之字形打印二叉樹

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

題目描述
請實現一個函數按照之字形順序從上向下打印二叉樹。算法

即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其餘行以此類推。函數

樣例spa

輸入以下圖所示二叉樹[8, 12, 2, null, null, 6, 4, null, null, null, null]
    8
   / \
  12  2
     / \
    6   4
輸出:[[8], [2, 12], [6, 4]]

算法1
在上一題的基礎上 加上了一個左右打印標誌 若是標誌爲真 則逆向一下輸入的vectorcode

C++ 代碼blog

/**
 * 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
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索