题目内容
107 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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
问题来源
问题简述
按层遍历二叉树,并按自底向上,从左至右的顺序记录每层的数值。
题目分析
递归法是解决这一问题较为直接的方法,即对二叉树进行深度优先遍历。其中,引入表示层数的递归变量level能够利用vector中的下标操作较为快捷地插入元素。level变量的初始值设为0,每次向下遍历时加一。
每次递归时,如果结果中不存在对应层数的子容器,则新建一个容器。然后与层数对应的子容器中插入相应值即可,然后对其子节点进行level递增1的递归调用即可。
递归完成后,所得容器经过外层反转后即可得到题目所需结果。
代码示例
class Solution {
public:
vector<vector<int>> res;
void DFS(TreeNode* p,int level)
{
vector<int> temp;
if(p==NULL)
return ;
if(level==res.size())
res.push_back(vector<int>());
res[level].push_back(p->val);
DFS(p->left,level+1);
DFS(p->right,level+1);
}
vector<vector<int>> levelOrderBottom(TreeNode* root) {
DFS(root,0);
vector<vector<int>> result;
for(int i=res.size()-1;i>=0;i--)
result.push_back(res[i]);
return result;
}
};
时间复杂度O(n),空间复杂度O(n).