1.题目描述
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
2.解题思路
(1)可以自顶向下遍历,最后进行反转即可。
(2)向下遍历的过程中记录层数,靠层数来定位当前位置,以便判断是继续在该层遍历还是向下一层转移。(根结点处层数为0)
(3)传入的容器需要初始化,空的容器无法使用size()和empty()等方法进行辅助判断。
(4)如果输入是一个空树的话,输出应为[],而不是[[]]。此时可以用clear()清空容器。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void levelOrderTop(TreeNode* root,int depth,vector<vector<int>> &data) {
if(root==NULL)
return;
if(data.size()-1<depth)
{
vector<int> temp;
temp.push_back(root->val);
data.push_back(temp);
}
else
{
data[depth].push_back(root->val);
}
if(root->left != NULL)
{
levelOrderTop(root->left, depth+1, data);
}
if(root->right != NULL)
{
levelOrderTop(root->right, depth+1, data);
}
}
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> data;
vector<int> temp;
data.push_back(temp);
levelOrderTop(root,0,data);
if(data[0].empty())
data.clear();
reverse(data.begin(),data.end());
return data;
}
};