代码解决
cpp/** * 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) { queue<TreeNode*> que; // 定义队列用于层次遍历 if(root!=NULL) que.push(root); // 如果根节点不为空,则将根节点加入队列 vector<vector<int>> result; // 定义结果向量,用于存储每一层的节点值 while(!que.empty()) // 当队列不为空时,继续处理 { int size=que.size(); // 获取当前层的节点数量 vector<int> vec; // 定义向量用于存储当前层的节点值 for(int i=0;i<size;i++) // 遍历当前层的每一个节点 { TreeNode* node=que.front(); // 从队列中取出一个节点 que.pop(); // 将该节点从队列中移除 vec.push_back(node->val); // 将该节点的值加入向量 if(node->left) que.push(node->left); // 如果该节点有左子节点,将其加入队列 if(node->right) que.push(node->right); // 如果该节点有右子节点,将其加入队列 } result.push_back(vec); // 将当前层的节点值向量加入结果向量 } return result; // 返回结果向量 } };
这段代码实现了一个二叉树的层次遍历(广度优先遍历),并返回每一层的节点值组成的二维数组。具体实现如下:
- 定义二叉树节点的结构体
TreeNode
。- 定义一个
Solution
类,其中包含一个公共成员函数levelOrder
。- 在
levelOrder
函数中,首先检查根节点是否为空,如果不为空则将根节点加入队列。- 初始化结果向量
result
,用于存储每一层的节点值。- 进入一个
while
循环,只要队列不为空,就继续处理:
- 获取当前队列的大小(即当前层的节点数量)。
- 初始化一个向量
vec
,用于存储当前层的节点值。- 使用
for
循环遍历当前层的每一个节点:
- 从队列中取出一个节点,并将其值加入
vec
。- 如果该节点有左子节点,则将左子节点加入队列。
- 如果该节点有右子节点,则将右子节点加入队列。
- 将当前层的节点值向量
vec
加入结果向量result
。- 最后返回结果向量
result
。