class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
int depth = 0;
getDepth(root,0,depth);
vector<vector<int>> result(depth);
if(depth==0) return result;
levelOrderBottom(root,result,0,depth-1);
return result;
}
void levelOrderBottom(TreeNode* root,vector<vector<int>> &result,int cur,int depth) {
if(root!=NULL){
if(result[depth-cur].size()<=0)
result[depth-cur] = vector<int>();
result[depth-cur].push_back(root->val);
}else{
return ;
}
if(root->left!=NULL)
levelOrderBottom(root->left,result,cur+1,depth);
if(root->right!=NULL)
levelOrderBottom(root->right,result,cur+1,depth);
}
void getDepth(TreeNode* root,int curLevel,int &maxDepth){
if(root!=NULL){
curLevel++;
}else{
return ;
}
if(curLevel>maxDepth){
maxDepth = curLevel;
}
if(root->left!=NULL)
getDepth(root->left,curLevel,maxDepth);
if(root->right!=NULL)
getDepth(root->right,curLevel,maxDepth);
}
};
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
int depth = 0;
getDepth(root,0,depth);
vector<vector<int>> result(depth);
if(depth==0) return result;
levelOrderBottom(root,result,0,depth-1);
return result;
}
void levelOrderBottom(TreeNode* root,vector<vector<int>> &result,int cur,int depth) {
if(root!=NULL){
if(result[depth-cur].size()<=0)
result[depth-cur] = vector<int>();
result[depth-cur].push_back(root->val);
}else{
return ;
}
if(root->left!=NULL)
levelOrderBottom(root->left,result,cur+1,depth);
if(root->right!=NULL)
levelOrderBottom(root->right,result,cur+1,depth);
}
void getDepth(TreeNode* root,int curLevel,int &maxDepth){
if(root!=NULL){
curLevel++;
}else{
return ;
}
if(curLevel>maxDepth){
maxDepth = curLevel;
}
if(root->left!=NULL)
getDepth(root->left,curLevel,maxDepth);
if(root->right!=NULL)
getDepth(root->right,curLevel,maxDepth);
}
};