Binary Tree Level Order Traversal II

Description:

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).

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

分析:

思路:

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/


class Solution {
/**
* @param root : The root of binary tree.
* @return : buttom-up level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrderBottom(TreeNode *root) {
// write your code here
if (root == nullptr) return vector<vector<int> >();

vector<pair<TreeNode*,int> > q;
int count = 0;
int level = 1;
q.push_back(make_pair(root, level));

while (count < q.size()) {
TreeNode *p = q[count].first;
level = q[count].second;

if (p->left) q.push_back(make_pair(p->left, level + 1));
if (p->right) q.push_back(make_pair(p->right, level + 1));
count++;
}

vector<vector<int> > rs(level, vector<int>());
for (int i = 0; i < q.size(); i++) {
rs[level-q[i].second].push_back(q[i].first->val);
}

return rs;
}
};