【leetcode】107-Binary Tree Level Order Traversal II
原创
©著作权归作者所有:来自51CTO博客作者mb62c788fd198da的原创作品,请联系作者获取转载授权,否则将追究法律责任
problem
Binary Tree Level Order Traversal II
根据题意,需要将每层的节点分别放入数组中,因此需要每层节点的数量。
广度优先搜索算法(Breadth First Search),又叫宽度优先搜索,或横向优先搜索。从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。借助队列数据结构,由于队列是先进先出的顺序,因此可以先将左子树入队,然后再将右子树入队。这样一来,左子树结点就存在队头,可以先被访问到。
code
/**
* 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 {//BFS.
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> vvi;
queue<TreeNode*> q;
if(root==NULL) return vvi;//
q.push(root);
while(!q.empty())
{
vector<int> vi;
for(int i=0, n=q.size(); i<n; i++)//q.size() always be changing.
{
TreeNode* tmp = q.front();
q.pop();
if(tmp->left != NULL) q.push(tmp->left);
if(tmp->right != NULL) q.push(tmp->right);
vi.push_back(tmp->val);
}
vvi.push_back(vi);
}
reverse(vvi.begin(), vvi.end());
return vvi;
}
};
View Code
总结
1. 使用队列的数据结构,记录每层的节点及其数目,队列先进先出,先左后右分别入队列;
2. 头结点的非空判断,以及每层节点的非空判断;
3. 每层节点的数量在处理的过程中会发生变化,需要将每层的节点数目固定赋值给某一变量;
4. 数据结构queue的用法;
参考
1. Binary Tree Level Order Traversal II;
3. cplusplus_queue;
完