给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
};
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
//思路层序遍历,存储方式为从下到上即可
vector<vector<int>>res; //保存最终结果
if (root == NULL)
return res;
queue<TreeNode*>q; //借助队列实现层序遍历
q.push(root);
while (!q.empty()) //队列不为空说明遍历没有完成
{
vector<int>oneLevel; //辅助数组,存储每一层的节点
int size = q.size(); //size,为统计的每一次节点的个数
for (int i = 0; i <size; i++) // 循环保证了每一层节点的完全插入辅助数组,再进行下一层的遍历
{
TreeNode* node = q.front(); //node为队首元素
q.pop(); //出队列, 判断队首元素的左右孩子是否有效
oneLevel.push_back(node->val); //将队首元素插入辅助数组
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
res.insert(res.begin(), oneLevel); // 头插,保证结果是从下到上的存储方式
}
return res;
}
};