给你一个二叉树,请你返回其按**层序遍历**得到的节点值。(即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
思路为: 使用一链表队列来进行层次遍历 遍历完每一层之后(用一数组暂存结果) 才遍历下一层.
(运用队列链表来实现dfs)
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>result; // 储存最后的结果
vector<int>path; // 储存每一层的结点
if(root == NULL) return result; // 处理空指针的情况
std::queue<TreeNode*>q; // 构造一辅助队列链表
TreeNode* p;
q.push(root); // 放入根节点
while(!q.empty()){ // q为辅助队列链表 其不为空 说明还有元素在树中
int len = q.size();
for(int i = 0;i<len;i++)//有多少个元素就往path里面塞多少个元素
{
p = q.front(); // 首先第一次是输出根节点
q.pop();
path.push_back(p->val);
if(p->left!=NULL){
q.push(p->left);
}
if(p->right != NULL){
q.push(p->right);
}
}
result.push_back(path);
path.clear();
// 此时result 已经保存了path里遍历的结果,即将进入树下一层的遍历了,故需要将path里的元素清空,避免对后面的结果产生影响。
}
return result;
}
欢迎各位来观看我的博客, 我的文章。希望能够帮到各位。如果各位有任何意见或者疑问可以在下方评论区留言哦。多谢各位~ ❤