[LeetCode]Binary Tree Level Order Traversal II
2013-05-27 19:15
295 查看
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { //BFS is always work for the level order traverse of a tree //all we need is add some additional information, to solve the specific problem of level order type public: vector<vector<int>> LevelOrder_BFS(TreeNode* root) { vector<vector<int>> ans; if(!root)//put the null tree judge here will be more neet return ans; queue<pair<TreeNode*, int>> q; int stepNow = 0; q.push(make_pair(root, stepNow)); vector<int> curLevel; while(!q.empty()) { TreeNode* curNode = q.front().first; int curStep = q.front().second; q.pop(); if(curStep != stepNow) { ans.push_back(curLevel); curLevel.clear(); stepNow = curStep; } curLevel.push_back(curNode->val); if(curNode->left) q.push(make_pair(curNode->left, curStep+1)); if(curNode->right) q.push(make_pair(curNode->right, curStep+1)); } ans.push_back(curLevel);//note: we should remember the last level here reverse(ans.begin(), ans.end()); return ans; } vector<vector<int> > levelOrderBottom(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function return LevelOrder_BFS(root); } };
second time
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: struct Node { TreeNode* treeNode; int level; Node(TreeNode* _treeNode = NULL, int _level = 0):treeNode(_treeNode), level(_level){}; }; vector<vector<int> > levelOrderBottom(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == NULL) return vector<vector<int> >(); queue<Node> nodeQ; nodeQ.push(Node(root, 1)); int prevLevel = 0; vector<int> curLevelAns; vector<vector<int> > allLevelAns; while(!nodeQ.empty()) { TreeNode* curNode = nodeQ.front().treeNode; int curLevel = nodeQ.front().level; nodeQ.pop(); if(curNode == NULL) continue; if(curLevel != prevLevel) { if(prevLevel != 0) allLevelAns.push_back(curLevelAns); curLevelAns.clear(); } prevLevel = curLevel; curLevelAns.push_back(curNode->val); nodeQ.push(Node(curNode->left, curLevel+1)); nodeQ.push(Node(curNode->right, curLevel+1)); } allLevelAns.push_back(curLevelAns); reverse(allLevelAns.begin(), allLevelAns.end()); return allLevelAns; } };
相关文章推荐
- [LeetCode] Binary Tree Level Order Traversal II
- LeetCode_Binary Tree Level Order Traversal II
- 【leetcode】【107】Binary Tree Level Order Traversal II
- ***(leetcode) Binary Tree Level Order Traversal II
- LeetCode 107 Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II -- LeetCode
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- Leetcode 107 Binary Tree Level Order Traversal II 二叉树层次遍历与倒转
- leetcode之Binary Tree Level Order Traversal II
- LeetCode No.107 Binary Tree Level Order Traversal II
- 【LeetCode】binary-tree-level-order-traversal i&ii&zigzag
- leetcode第42题(binary-tree-level-order-traversal-ii)
- [Leetcode]Binary Tree Level Order Traversal II
- 【Leetcode】Binary Tree Level Order Traversal II
- [LeetCode 107] Binary Tree Level Order Traversal II
- LeetCode题解:Binary Tree Level Order Traversal I and II
- leetcode Binary Tree Level Order Traversal II
- leetcode 107 Binary Tree Level Order Traversal II
- LeetCode之Binary Tree Level Order Traversal II
- LeetCode107 Binary Tree Level Order Traversal II