102.二叉树的层序遍历
题目链接:
题目描述
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例: 二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
题解
思路:二叉树的深度优先遍历(前中后序遍历)是借助“栈”来实现,而广度优先遍历(层次遍历)借助“队列”来实现。如下图所示是层次遍历的过程:
代码(C++):
struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int value) : val(value), left(nullptr), right(nullptr) {} }; class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> que; vector<vector<int>> result; if (root != nullptr) que.push(root); while (!que.empty()) { int size = que.size(); vector<int> temp; for (int i = 0; i < size; i++) { TreeNode* node = que.front(); que.pop(); temp.push_back(node->val); if (node->left != nullptr) que.push(node->left); if (node->right != nullptr) que.push(node->right); } result.push_back(temp); } return result; } };
-
时间复杂度:O(N),其中N是树中节点的个数,每个节点进出队列各一次
-
空间复杂度:O(N),队列中的元素个数不超过N