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; } };
总结
1. 使用队列的数据结构,记录每层的节点及其数目,队列先进先出,先左后右分别入队列;
2. 头结点的非空判断,以及每层节点的非空判断;
3. 每层节点的数量在处理的过程中会发生变化,需要将每层的节点数目固定赋值给某一变量;
4. 数据结构queue的用法;
参考
1. Binary Tree Level Order Traversal II;
2. CSDN_blog;
3. cplusplus_queue;
完