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

    3

   / \

  9  20

    /  \

   15   7

 

return its bottom-up level order traversal as:

[

  [15,7]

  [9,20],

  [3],

]
/**

 * 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

        stack<vector<int>> s;

        if(!root) return vector<vector<int>>();

        

        queue<TreeNode*> q1,q2;

        q1.push(root);

        

        TreeNode *cur;

        vector<int> tmp;

        

        while(!q1.empty()){

            tmp.clear();

            while(!q1.empty()){

                cur = q1.front();

                q1.pop();

                

                tmp.push_back(cur -> val);

                if(cur -> left) q2.push(cur -> left);

                if(cur -> right) q2.push(cur -> right);

            }

            s.push(tmp);

            swap(q1, q2);

        }

        

        vector<int> curVec;

        vector<vector<int>> result;

        while(!s.empty()){

            curVec = s.top();

            s.pop();

            result.push_back(curVec);

        }

        return result;

        

    }

        

    

};



 

你可能感兴趣的:(LeetCode)