<style> html, body, .ui-content { background: #222222; color: #00BFFF; } ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: linear-gradient(180deg, #2BE8CF60 0%, #2B83E860 100%); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, #2BE8CF95 0%, #2B83E895 100%); } /* 設定 code 模板 */ .markdown-body code, .markdown-body tt { background-color: #ffffff36; } .markdown-body .highlight pre, .markdown-body pre { color: #ddd; background-color: #00000036; } .hljs-tag { color: #ddd; } .token.operator { background-color: transparent; } </style> ###### tags: `Leetcode` # 103. Binary Tree Zigzag Level Order Traversal ###### Link : https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/description/ ## 題目 求樹的Zigzag levelorder Zigzag levelorder: 1. 必須分層 2. 第一層由左至右,第二層由右至左,以此類推 ## 程式碼 ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> ans; queue<TreeNode *> q; int i = 0; if(root) q.push(root); while(!q.empty()){ int size = q.size(); vector<int> temp; for(int i = 0;i < size;++i){ TreeNode* node = q.front(); q.pop(); temp.push_back(node->val); if(node->left) q.push(node->left); if(node->right) q.push(node->right); } if(i++ & 1) reverse(temp.begin(), temp.end()); ans.push_back(temp); } return ans; } }; ```