(待思考--不采用逆置等的思想)107. Binary Tree Level Order Traversal II
2017-01-09 18:03
417 查看
107. Binary Tree Level Order Traversal II
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,null,null,15,7],
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
方法一、递归的方法:用到c++的反向迭代器
vector<vector<int> > result; void levelTra(TreeNode *root, int level) { if(root == NULL) return; if(level == result.size()) { vector<int> v; result.push_back(v); } result[level].push_back(root->val); levelTra(root->left, level+1); levelTra(root->right, level+1); } vector<vector<int> > levelOrderBottom(TreeNode *root) { levelTra(root, 0); return vector<vector<int> >(result.rbegin(), result.rend()); }
方法二、非递归的方法,层次遍历
(1)stack
vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> result; if(NULL == root) return vector<vector<int>>(); queue<TreeNode*> que; que.push(root); int countLevNodes = 1; vector<int> temp; stack<vector<int>> tempSta; while(!que.empty()) { TreeNode* tempTreeNode = que.front(); que.pop(); temp.push_back(tempTreeNode->val); countLevNodes--; if(tempTreeNode->left != NULL) que.push(tempTreeNode->left); if(tempTreeNode->right != NULL) que.push(tempTreeNode->right); if(countLevNodes == 0) { tempSta.push(temp); temp.clear(); countLevNodes = que.size(); } } while(!tempSta.empty()) { temp = tempSta.top(); tempSta.pop(); result.push_back(temp); } return result; }
(2)reverse
vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> result; if(NULL == root) return vector<vector<int>>(); queue<TreeNode*> que; que.push(root); int countLevNodes = 1; vector<int> temp; while(!que.empty()) { TreeNode* tempTreeNode = que.front(); que.pop(); temp.push_back(tempTreeNode->val); countLevNodes--; if(tempTreeNode->left != NULL) que.push(tempTreeNode->left); if(tempTreeNode->right != NULL) que.push(tempTreeNode->right); if(countLevNodes == 0) { result.push_back(temp); temp.clear(); countLevNodes = que.size(); } } reverse(result.begin(),result.end()); return result; }
相关文章推荐
- LeetCode力扣之107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 102/107. Binary Tree Level Order Traversal/II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107.Binary Tree Level Order Traversal II
- leetcode之Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal 、Binary Tree Level Order Traversal II
- LeetCode-Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- LeetCode刷题(C++)——Binary Tree Level Order Traversal II(Easy)
- LeetCode-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
- Binary Tree Level Order Traversal II