本文共 1189 字,大约阅读时间需要 3 分钟。
分享了一段关于二叉树广度优先搜索的代码片,这段代码实现了层序遍历,并将每一层的节点值收集到一个向量中。以下是优化后的代码片及其详细解释:
#include#include #include /* 二叉树的层序遍历(宽度优先搜索)实现 */vector levelOrder(TreeNode *root) { queue q; vector result; vector currentLevel; if (!root) return result; q.push(root); while (!q.empty()) { int levelSize = q.size(); currentLevel.clear(); for (int i = 0; i < levelSize; ++i) { TreeNode *node = q.front(); q.pop(); currentLevel.push_back(node->val); if (node->left) { q.push(node->left); } if (node->right) { q.push(node->right); } } result.push_back(currentLevel); } return result;}
代码解析:
初始化队列和结果容器:
queue<TreeNode *> q;
用于实现广度优先搜索,按层处理每个节点。vector<int> result;
用于存储最终的层序遍历结果。vector<int> currentLevel;
用于存储当前处理层的节点值,避免直接操作结果向量,确保每层完整收集。检查根节点是否存在:
主循环实现广度优先搜索:
while
循环中,当前队列大小决定当前层的节点数量。for
循环逐个处理队列中的每个节点 node。收集层结果:
优化说明:
result
表示最终结果, currentLevel
表示当前处理层的节点值,命名清晰易懂。转载地址:http://ifeoz.baihongyu.com/