题目描述
107. Binary Tree Level Order Traversal II
- Total Accepted: 127134
- Total Submissions: 321893
- Difficulty: Easy
- Contributor: LeetCode
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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
从下到上,一层一层地打印整棵树。
解题思路
广度优先搜索,就能得到一层一层。但是,要怎样确定每点是属于哪层呢?因为在队列里是无法分辨的。这里可以使用unordered_map,点 映射到 层数。
(这个问题在我上数据结构时就没想明白,想不到用map就轻易解决了)
代码如下
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int> >re;
if (root == NULL)
return re;
unordered_map<TreeNode*, int> ceng;
queue<TreeNode*> qu;
qu.push(root);
ceng[root] = 1;
vector<int> hhh;
int thisceng = 1;
while (!qu.empty()) {
TreeNode* tmp = qu.front();
qu.pop();
if (ceng[tmp] == thisceng)
hhh.push_back(tmp->val);
else {
thisceng = ceng[tmp];
re.push_back(hhh);
hhh.clear();
hhh.push_back(tmp->val);
}
if (tmp->left) {
ceng[tmp->left] = ceng[tmp] + 1;
qu.push(tmp->left);
}
if (tmp->right) {
ceng[tmp->right] = ceng[tmp] + 1;
qu.push(tmp->right);
}
}
re.push_back(hhh);
vector<vector<int>> retmp(re.size());
for (int y = re.size() - 1, j = 0; y >= 0; y--, j++)
retmp[j] = re[y];
return retmp;
}
};