题目:
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:
此题容易想到使用 广度优先遍历 (bfs),与基础bfs不同之处在于:基础bfs从左到右,从上到下遍历节点,不区分层;此题需要区分层。
因此,在bfs的基础上改进:每次从队列里取一层节点,而不是每次从队列里取一个节点。
代码:
/**
* 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>> result;
if(!root)
return result;
queue<TreeNode*> que;
que.push(root);
while(!que.empty())
{
int n=que.size();
vector<int> v;
for(int i=0; i<n; i++)
{
TreeNode* node = que.front();
que.pop();
v.push_back(node->val);
if(node->left)
que.push(node->left);
if(node->right)
que.push(node->right);
}
result.push_back(v);
}
return result;
}
};