使用广度优先搜索和获得队列大小:
/** * 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; } };
原文:https://www.cnblogs.com/joelwang/p/10686530.html