当前位置:首页 » 《随便一记》 » 正文

【C++】102.二叉树的层序遍历

21 人参与  2024年03月09日 13:51  分类 : 《随便一记》  评论

点击全文阅读


题目描述

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]输出:[[1]]

示例 3:

输入:root = []输出:[]

提示:

树中节点数目在范围 [0, 2000]-1000 <= Node.val <= 1000

思路分析

这个问题实际上可以只用一个队列就实现,只需要再增加一个变量levelSize,用来记录每一层的数据个数,然后再让这个队列一层一层的出去。之前的方法中,实际上队列并不是一层一层出去的,它有可能队列里面同时有两层的数据,我们以下面这个图来解释一下原因:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果有两层队列实现的话,3这个节点出来的时候,会让920这两个节点进入队列,而9这个节点出来的时候会让15这个节点进入队列,这个时候队列里面就同时有了第2层和第3层的数据。

所以我们想通过levelSize来达到一个目的:控制这个队列实现一层一层的出去。

那我们要怎么实现呢?我们仍然以刚才的图来进行分析:

3节点进入队列的时候,它的层数为1,由于它是根节点,所以它肯定只有一个,所以3就可以直接出队列。这个时候我们让levelSize进行自减操作它就变成了0,表示这一层已经出完了。

那么由于3节点出的时候会把920也带进来,也就是说当前层的节点全部出队列的时候一定是下一层的节点全部进入队列,这个时候我们将levelSize重新更新为第二层节点的数目也就是2,然后再进行出队列的操作:9节点出队列同时将15节点带进队列,然后levelSize自减变为120节点出队列同时将15节点和7节点带进队列,levelSize再自减变为0。这个时候就说明第二层也出完了。那么此时第三层都在队列里面所以我们再次更新levelSize的值为3,依次类推直到整棵树都被遍历完就实现了只用一个队列实现层序遍历。

那么根据以上的思路,我们就可以写出下面的代码:

完整代码

class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {        queue<TreeNode*> q;        int levelSize = 0;        if (root)//如果根不为空,就入队列        {            q.push(root);            levelSize = 1;        }        vector<vector<int>> vv;//用来存放一层一层出的节点        while (!q.empty())//如果队列不等于空,就说明树还没有被遍历完        {            //通过levelSize控制一层一层出            vector<int> v;//用来存放每一层的数据            while (levelSize--)//levelSize是几循环就执行几次,--levelSize表示的则是执行(levelSize - 1)次            {                TreeNode* front = q.front();//先取队头的数据                q.pop();                v.push_back(front->val);                //进去的同时把该节点的下一层往队列里面带                if (front->left)//左如果不为空就让左入队列                    q.push(front->left);                if (front->right)//右如果不为空就让右入队列                    q.push(front->right);            }            //走到这里就说明当前层已经出完了,就把当前层所出的数据放到vv里面            vv.push_back(v);            //更新下一层的数据            levelSize = q.size();        }        return vv;    }};

运行结果
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/76448.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 进错房,嫁给八零最牛特种兵已完结(林晚夏江肆年)抖音热文_《进错房,嫁给八零最牛特种兵已完结》最新章节免费在线阅读 -
  • 重生后选魔族,天族哭着求我当王全章节(月沁雪任意)全文免费阅读无弹窗大结局_(重生后选魔族,天族哭着求我当王全章节)重生后选魔族,天族哭着求我当王全章节免费阅读全文最新章节列表_笔趣阁(重生后选魔族,天族哭着求我当王全章节) -
  • 捡回摄政王后,她在皇室作威作福完结版小说(景飞鸢赵灵杰)全文免费阅读无弹窗大结局_(捡回摄政王后,她在皇室作威作福完结版免费阅读全文大结局)最新章节列表_笔趣阁(捡回摄政王后,她在皇室作威作福完结版) -
  • 千金难泣(立轩苏子骞翠竹吴进)全本免费在线阅读_千金难泣最新章节在线阅读(立轩苏子骞翠竹吴进)
  • 《沈云阶傅宴辞》(沈云阶傅宴辞》已完结完整版全集大结局小说)全文阅读笔趣阁
  • 《沈凌峰沈国华》已完结小说全文阅读笔趣阁《沈凌峰沈国华》
  • 《傅嫤韩恬魏郯程茂》已完结(傅嫤韩恬魏郯程茂)热门小说全目录完整版)全文阅读笔趣阁
  • 八零俏军医错嫁糙汉军官:番外+全文+后续(贺昭朗孟翩然)完本小说免费_全本免费小说八零俏军医错嫁糙汉军官:番外+全文+后续最新小说全文阅读(贺昭朗孟翩然)
  • 失去千千万万遍在线阅读(阮相宜陆凛言)全文免费阅读无弹窗大结局_(失去千千万万遍在线阅读)失去千千万万遍在线阅读免费阅读全文最新章节列表_笔趣阁(失去千千万万遍在线阅读) -
  • 脱离世界后,妻子疯了火爆小说小说(沈夕颜林程言)全文免费阅读无弹窗大结局_(脱离世界后,妻子疯了火爆小说免费阅读全文大结局)最新章节列表_笔趣阁(脱离世界后,妻子疯了火爆小说) -
  • 跨年发生踩踏,男友为救白月光丢下我(温林初宝宝)免费阅读 -
  • 都重生了,还不离婚等啥呢宋招弟霍文铮小说在线章节免费阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1