本題是二叉樹的層序遍歷,通過一個隊列來控制遍歷的節點,二叉樹每層的節點和上一層入隊的節點個數是相同的,根據這一點編寫循環條件。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;queue<TreeNode*> que;if(root != nullptr){que.push(root);}while(!que.empty()){int size = que.size();vector<int> vec;for(int i = 0; i < size; i++){TreeNode* cur = que.front();que.pop();vec.push_back(cur->val);if(cur->left != nullptr){que.push(cur->left);}if(cur->right != nullptr){que.push(cur->right);} }result.push_back(vec);}return result;}
};
使用遞歸的寫法:層序遍歷也是正向進行遍歷,因此在到達新的一層是,首先為返回數組result添加一個容納這一層元素的空數組,之后便可以向這個空數組添加本層的元素,添加完后,前往這個節點的左右子節點。
class Solution {
public:void order(TreeNode* cur, vector<vector<int>>& result, int depth){if(cur == nullptr){return;}if(result.size() == depth){result.push_back(vector<int>());}result[depth].push_back(cur->val);order(cur->left, result, depth + 1);order(cur->right, result, depth + 1);}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;int depth = 0;order(root, result, depth);return result;}
};