传送门
二叉树的层序遍历:给你二叉树的根节点root,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
无
无
无
无
/**
* 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>> ret;
if(!root) return ret;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int currentLevelSize = q.size();
ret.push_back(vector<int>());
for(int i = 1; i <= currentLevelSize; ++i){
auto node = q.front();
q.pop();
ret.back().push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return ret;
}
};
通过广度优先搜索实现,二叉树的层序遍历。广度优先搜索遍历通常是借助“队列”来实现的。队列遵循先进先出的规则,而广度优先搜索则遵循“逐层推进”的规则,两者之间背后的思想是一致的。
时间复杂度:
每个点进队出队各一次,故渐进时间复杂度为O(n)。
空间复杂度:
队列中元素的个数不超过n个,故渐进空间复杂度为O(n)。
广度优先搜索通常与队列结合起来一起用。
2024.1.16
欢迎前来讨论指正。