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},

 

    3

   / \

  9  20

    /  \

   15   7

return its bottom-up level order traversal as:

 

[

  [15,7]

  [9,20],

  [3],

]

class Solution {
public:
    int getHeight(TreeNode *root){
        if (!root){
            return 0;
        }
        return max(getHeight(root->left),getHeight(root->right)) + 1;
    }
    vector<vector<int> > levelOrderBottom(TreeNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > ans;
        vector<int> layer_v;
        if (!root){
            return ans;
        }
        int height = getHeight(root);
        ans.resize(height);
        
        int layer = 0;
        queue<pair<TreeNode*, int> > qu;
        
        qu.push(make_pair(root,0));
        pair<TreeNode*, int> node;
        
        while(!qu.empty()){
            node = qu.front();
            qu.pop();
            if (node.second == layer){
                layer_v.push_back(node.first->val);
            }else{
                ans[height - layer -1] = layer_v;
                layer++;
                layer_v.clear();
                layer_v.push_back(node.first->val);
            }
            
            if (node.first->left){
                qu.push(make_pair(node.first->left,node.second+1));
            }
            if (node.first->right){
                qu.push(make_pair(node.first->right,node.second+1));
            }
        }
        ans[height - layer -1] = layer_v;
        
        return ans;
    }
};

 

posted @ 2013-07-01 23:55  一只会思考的猪  阅读(174)  评论(0)    收藏  举报