leetcode 102二叉树的层序遍历
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<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(root==NULL) return res; queue<TreeNode*> q; q.push(root); while(!q.empty()){ vector<int> level; int len=q.size(); for(int i=0;i<len;i++){ TreeNode* p=q.front(); q.pop(); level.push_back(p->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<vector<int>> levelOrder(TreeNode* root) { if(root==NULL) return {}; queue<TreeNode*> q; TreeNode* front; q.push(root); vector<vector<int>> res; while(!q.empty()){ vector<int> 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<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q1; queue<TreeNode*> q2; if(root==NULL) return {}; q1.push(root); while(!q1.empty()){ vector<int> 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; } };