【leetcode】BinaryTreeLevelOrderTraversalII
Question :
Given a binary tree, return the
bottom-up level order
traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree
{3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]
confused what
"{1,#,2,3}"
means?
> read more on how binary tree is serialized on OJ.
Anwser 1 :
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int>> ret; if(root == NULL) return ret; vector<int> vec; queue<TreeNode *> Q; Q.push(root); int count = 1; while(!Q.empty()){ vec.clear(); int nextCount = 0; // cal next row count for(int i = 0; i < count; i++){ // one row count TreeNode *tmp = Q.front(); Q.pop(); vec.push_back(tmp->val); // save one row val if(tmp->left){ Q.push(tmp->left); nextCount++; } if(tmp->right){ Q.push(tmp->right); nextCount++; } } count = nextCount; ret.push_back(vec); } reverse(ret.begin(), ret.end()); //reverse vector return ret; } };
注意点: 添加了一行
reverse(ret.begin(), ret.end());
// reverse vector
Anwser 2 :
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int>> ret; if(root == NULL) return ret; vector<int> vec; queue<TreeNode *> Q; queue<TreeNode *> Q2; // extra space Q.push(root); while(!Q.empty()){ TreeNode *tmp = Q.front(); Q.pop(); if(tmp != NULL){ vec.push_back(tmp->val); if(tmp->left) Q2.push(tmp->left); if(tmp->right) Q2.push(tmp->right); } if(Q.empty()){ // one row end ret.push_back(vec); vec.clear(); swap(Q, Q2); } } reverse(ret.begin(), ret.end()); // reverse vector } };
注意点: 添加了一行
reverse(ret.begin(), ret.end());
// reverse vector
参考推荐:
Binary Tree Level Order Traversal
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2013-05-01 23:21:31
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!