【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],

]

 

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

    \

     5

The above binary tree is serialized as  "{1,2,3,#,#,4,#,#,5}".
code: 1A 36ms
/**

 * 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) {

        // Note: The Solution object is instantiated only once and is reused by each test case.

        vector<vector<int> > res;

        if(root == NULL)

            return res;

        queue<TreeNode *> qu;

        qu.push(root);

        qu.push(NULL);

        vector<int> onelevel;

        while(true)

        {

            TreeNode *cur = qu.front();

            qu.pop();

            if(cur == NULL)

            {

                res.push_back(onelevel);

                onelevel.clear();

                if(qu.empty())

                    break;

                qu.push(NULL);

            }

            else

            {

                onelevel.push_back(cur->val);

                if(cur->left)

                    qu.push(cur->left);

                if(cur->right)

                    qu.push(cur->right);

            }

            

        }

        reverse(res.begin(),res.end());

        return res;

    }

};


 

你可能感兴趣的:(LeetCode)