树的层序遍历

本文总结了树的四种遍历方法,重点讨论了层序遍历,包括二叉树和n叉树的层序遍历,并提供了代码示例。层序遍历采用广度优先搜索策略,通过队列进行节点处理,根据不同题目要求进行翻转或标志处理。
摘要由CSDN通过智能技术生成

突然想到写这个的原因是在四月份的每日一题里面有一个n叉树的层序遍历,然后自己做的其实不熟练。又想到之前又写过二叉树的层序遍历,所以就想着将几个题目一起总结起来。也算是加深一下印象了。
树的遍历方法一共四种:
先序遍历、中序遍历、后序遍历、层序遍历。
前三种方法中的序是指根节点的遍历顺序,一般使用递归(深度优先遍历)的方法实现。
层序遍历是指从最上层开始,一层一层的从左到右遍历,而不再是先左后右或先右后左。
层序遍历和广度优先搜索的思路比较像,维护一个队列,先将根结点放入队列中,当该结点出队列是,他的孩子结点就入队列。但是这样并不会有明显的分层,而只有一个数组,所以我们还需要记录每一层的结点数量,方便分层。
第一题:二叉树的层序遍历
这个题的思路就和上面说到的层序遍历的思路一样,先将根结点入队列,根结点出队列时将根节点的左右孩子入队列。为了区分每一层,则在每一层遍历开始之前记录下这一层的结点数量。将每一层的遍历区分开。
一层遍历的代码如下:

			int n=q.size();
            vector<int>v;//用于存放结点数值的数组
            while(n--){
   
                TreeNode*p=q.front();
                q.pop();
                v.emplace_back(p->val);
                if(p->left)
                q.push(p->left);
                if(p->right)
                q.push(p->right);
            }
            result.emplace_back(v);

参考代码:

class Solution {
   
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
   
            if(!root)
            return {
   };
            vector<vector<int>>result;
            queue<TreeNode*>q;//队列,用于存放根节点
            q.push(root);
            while(!q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值