leetcode之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,#,#,15,7},
return its bottom-up level order traversal as:
题意
这道题考察的是将二叉树按照层次遍历,然后输出成一个二维数组,然后要注意两点:
1、是要按照层次来输出;
2、是按照从下->上来进行排序的;
所以这里可以按照典型的BFS来进行遍历整个二叉树,然后将这个所遍历到的节点,逐个存放在二叔数组里;
然后将这个二维数组逆序,也就是reverse,因为按照BFS的顺序,输出的是从上->下的顺序。
C++实现代码
/**
* 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>> vv;
if(!root) return vv;
queue<TreeNode*> qu;
qu.push(root);
while(!qu.empty()){
int size = qu.size();
vector<int> v;
for(int i=0;i<size;i++){
TreeNode* head = qu.front();
qu.pop();
v.push_back(head->val);
if(head->left) qu.push(head->left);
if(head->right) qu.push(head->right);
}
vv.push_back(v);
}
reverse(vv.begin(),vv.end());
return vv;
}
};