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.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / 2 3 / 4 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
./** * 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 queue<TreeNode*> q; vector<vector<int> >ret; if(root==NULL)return ret; q.push(root); int level=0; ret.resize(level+1); int count=1; int nextCount=0; while(q.size()>0){ if(count==0){ level++; ret.resize(level+1); count=nextCount; nextCount=0; } TreeNode* current=q.front(); ret[level].push_back(current->val); q.pop(); if(current->left!=NULL){ q.push(current->left); nextCount++; } if(current->right!=NULL){ q.push(current->right); nextCount++; } count--; } int half=ret.size()/2; for(int i=0;i<half;i++){ vector<int> temp=ret[i]; ret[i]=ret[ret.size()-i-1]; ret[ret.size()-i-1]=temp; } return ret; } };