5月20更新:
使用借助队列实现bfs,定义len记录队列的尺寸直接进行遍历层序
/** * 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> levelOrder(TreeNode* root) { vector > res; if(root==NULL) return res; queue q; q.push(root); while(!q.empty()){ vector level; int len=q.size(); for(int i=0;i val); if(p->left!=NULL) q.push(p->left); if(p->right!=NULL) q.push(p->right); } res.push_back(level); } return res; }};
更新之前:使用广度优先搜索和获得队列大小:
/** * 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> levelOrder(TreeNode* root) { if(root==NULL) return {}; queue q; TreeNode* front; q.push(root); vector > res; while(!q.empty()){ vector onelevel; for(int i=q.size();i>0;i--){ front=q.front(); q.pop(); if(front->left) q.push(front->left); if(front->right) q.push(front->right); onelevel.push_back(front->val); } res.push_back(onelevel); } return res; }};
使用两个队列:
/** * 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> levelOrder(TreeNode* root) { vector > res; queue q1; queue q2; if(root==NULL) return {}; q1.push(root); while(!q1.empty()){ vector level; while(!q1.empty()){ TreeNode* cur=q1.front(); q1.pop(); level.push_back(cur->val); if(cur->left) q2.push(cur->left); if(cur->right) q2.push(cur->right); } while(!q2.empty()){ q1.push(q2.front()); q2.pop(); } res.push_back(level); } return res; }};