102. 二叉树的层序遍历(队列+BFS+结构体)
Posted baboon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了102. 二叉树的层序遍历(队列+BFS+结构体)相关的知识,希望对你有一定的参考价值。
题目描述
leetcode - 102:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
解题关键
- 队列
- BFS
- 结构体
碎碎念
这道题可以不用结构体,在while循环里面加一个for循环来遍历某一层的节点。但是很多宽搜的题一般节点需要存储一些别的信息,所以我写BFS基本都统一用结构体来做了。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
// 新定义一个结构体,存储节点的高度和节点
struct FloorNode {
TreeNode *node;
int depth;
FloorNode(int _depth, TreeNode* _node){
depth = _depth;
node = _node;
}
};
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
if(root==NULL) return ans;
queue<FloorNode> Q;
Q.push(FloorNode(0,root));
ans.push_back(vector<int>());
int depth = 0;
while(!Q.empty()){
FloorNode tmp = Q.front();
TreeNode* tmpNode = tmp.node;
Q.pop();
if(depth!=tmp.depth){
ans.push_back(vector<int>());
depth++;
}
ans[depth].push_back(tmpNode->val);
if(tmpNode->left){
Q.push(FloorNode(depth+1,tmpNode->left));
}
if(tmpNode->right){
Q.push(FloorNode(depth+1,tmpNode->right));
}
}
return ans;
}
};
以上是关于102. 二叉树的层序遍历(队列+BFS+结构体)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Algorithm 102. 二叉树的层序遍历