题目:
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例:
输入:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
解题方法:
典型的广度优先搜索,简单说明一下思路:
- 创建一个队列,队列的特点就是先进先出,向队列中插入根节点;
- 取出当前队列中的结点,创建一个vector用来存储取出结点的val值,然后把该结点的左右子节点指针存进队列。
- 不考虑取出结点的子结点的话,每次取出的结点都在同一层,最后队列清空,把得到的vector反转,就可以得到要求的层次遍历结果。
代码和结果:
/**
* 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:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> res;
if(root==NULL)
return res;
queue<TreeNode *> qu;
qu.push(root);
while(qu.size())
{
vector<int> tp;
int len=qu.size();
for(int i=0;i<len;i++)
{
TreeNode* ptr=qu.front();
tp.push_back(ptr->val);
if(ptr->left) qu.push(ptr->left);
if(ptr->right) qu.push(ptr->right);
qu.pop();
}
res.push_back(tp);
}
reverse(res.begin(),res.end());
return res;
}
};
运行结果:
原题链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
网友评论