- binary-tree-level-order-traversal
- binary-tree-level-order-traversal-ii
- binary-tree-zigzag-level-order-traversal
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > levelOrder(TreeNode *root) { vector<vector<int>> res; if(root == nullptr) return res; queue<TreeNode*> q; q.push(root); vector<int> onelevel; while(!q.empty()){ onelevel.clear(); int size = q.size(); for(int i=0;i<size;i++){ TreeNode* cur = q.front(); q.pop(); onelevel.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } res.push_back(onelevel); } return res; } };
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > levelOrderBottom(TreeNode *root) { vector<vector<int>> res; if(root == nullptr) return res; queue<TreeNode*> q; q.push(root); vector<int> onelevel; while(!q.empty()){ onelevel.clear(); int size = q.size(); for(int i=0;i<size;i++){ TreeNode* cur = q.front(); q.pop(); onelevel.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } res.insert(res.begin(),onelevel); } return res; } };
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int>> res; if(root == nullptr) return res; stack<TreeNode*> s1; stack<TreeNode*> s2; s1.push(root); vector<int> onelevel; while(!s1.empty() || !s2.empty()){ onelevel.clear(); while(!s1.empty()){ TreeNode* cur = s1.top(); s1.pop(); onelevel.push_back(cur->val); if(cur->left) s2.push(cur->left); if(cur->right) s2.push(cur->right); } if(!onelevel.empty()){ res.push_back(onelevel); onelevel.clear(); } while(!s2.empty()){ TreeNode* cur = s2.top(); s2.pop(); onelevel.push_back(cur->val); if(cur->right) s1.push(cur->right); if(cur->left) s1.push(cur->left); } if(!onelevel.empty())res.push_back(onelevel); } return res; } };