problem
根据题意,需要将每层的节点分别放入数组中,因此需要每层节点的数量。
广度优先搜索算法(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> levelOrderBottom(TreeNode* root) { vector > vvi; queue q; if(root==NULL) return vvi;// q.push(root); while(!q.empty()) { vector vi; for(int i=0, n=q.size(); i 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; }};
总结
1. 使用队列的数据结构,记录每层的节点及其数目,队列先进先出,先左后右分别入队列;
2. 头结点的非空判断,以及每层节点的非空判断;
3. 每层节点的数量在处理的过程中会发生变化,需要将每层的节点数目固定赋值给某一变量;
4. 数据结构queue的用法;
参考
1. ;
2. ;
3. ;
完