关于二叉树的层序遍历:故名思意,就是对二叉树的每一层进行遍历
举个例子,对于以下形式的二叉树

它的层序遍历的结果是 [1] [2, 3] [4, 5]
如何利用非递归的形式实现呢?
核心思路
- 队列:队列遵循 先进先出(FIFO) 原则,非常适合按层级顺序处理节点。
- 逐层处理:
- 首先将根节点入队。
- 每次从队列中取出一个节点,并访问该节点。
- 将该节点的左子节点和右子节点(如果存在)依次入队。
- 重复上述步骤,直到队列为空。
以下为 C++ 代码实现
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
if (root == nullptr) {
return result;
}
queue<TreeNode*> que;
que.push(root);
while (!que.empty()) {
int n = que.size();
vector<int> vec;
for (int i = 0; i < n; i++) {
TreeNode* frontNode = que.front();
que.pop();
vec.push_back(frontNode->val);
if (frontNode->left != nullptr) {
que.push(frontNode->left);
}
if (frontNode->right != nullptr) {
que.push(frontNode->right);
}
}
result.push_back(vec);
}
return result;
}
以下是上述二叉树的层序遍历过程:

- 初始队列:[1]
- 第 1 层:
出队 1,访问 1,入队子节点 2, 3。
队列变为 [2, 3]。 - 第 2 层:
a. 出队 2,访问 2,入队子节点 4, 5。
队列变为 [3, 4, 5]。
b. 出队 3,访问 3,无子节点入队。
队列变为 [4, 5]。 - 第 3 层:
a. 出队 4,访问 4,无子节点入队。
队列变为 [5]。
b. 出队 5,访问 5,无子节点入队。
队列为空,遍历结束。
结果:[1, 2, 3, 4, 5]
&spm=1001.2101.3001.5002&articleId=148459709&d=1&t=3&u=743f116eaec84db59367b3703c08a4fb)
1万+

被折叠的 条评论
为什么被折叠?



