本篇内容主要讲解“c++怎么实现二叉树层序遍历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c++怎么实现二叉树层序遍历”吧!
二叉树层序遍历
给定一个二叉树,返回, 层次顺序,遍历它的节点# 39;值。(从左到右,逐级返回)。例如:
给定二进制tree {20岁的3、9 #,#,15日7},
,,,3
引用>
/\
9,20
/,15 \
,,7返回顺序遍历水平为:
(
引用>
[3],
[9日20],
[15, 7]
]层序遍历二叉树是典型的广度优先搜索BFS的应用,但是这里稍微复杂一点的是,要把各个层的数分开,存到一个二维向量里面,大体思路还是基本相同的,建立一个队列,然后先把根节点放进去,这时候找根节点的左右两个子节点,这时候去掉根节点,此时队列里的元素就是下一层的所有节点,用一个对循环遍历它们,然后存到一个一维向量里,遍历完之后再把这个一维向量存到二维向量里,以此类推,可以完成层序遍历,参见代码如下:
解法一:
class Solution { 公众: ,,,vector祝辞,levelOrder (TreeNode *,根),{ ,,,,,,,if (根),return {}; ,,,,,,,vector 祝辞,res; ,,,,,,,queue , oneLevel; ,,,,,,,,,,,for (int 小姐:=,q.size();,小姐:祝辞,0;,——我),{ ,,,,,,,,,,,,,,,TreeNode * t =, q.front ();, q.pop (); ,,,,,,,,,,,,,,,oneLevel.push_back (t→val); ,,,,,,,,,,,,,,,if (t→左),q.push (t→左); ,,,,,,,,,,,,,,,if (t→右),q.push (t→右); ,,,,,,,,,,,} ,,,,,,,,,,,res.push_back (oneLevel); ,,,,,,,} ,,,,,,,return res; ,,,} }; 下面来看递归的写法,核心就在于需要一个二维数组,和一个变量水平,关于水平的作用可以参见博主的另一篇博客,二叉树的层次遍历顺序II 中的讲解,参见代码如下:
解法二:
class Solution { 公众: ,,,vector祝辞,levelOrder (TreeNode *,根),{ ,,,,,,,vector 祝辞,res; ,,,,,,,levelorder(根,0,res); ,,,,,,,return res; ,,,} ,,,void levelorder (TreeNode *时间节点,大敌;;int 水平,,vector 祝辞,,res), { ,,,,,,,if (!节点),返回; ,,,,,,,if (res.size(),==,级别),res.push_back ({}); ,,,,,,,res(水平).push_back(节点→val); ,,,,,,,if (节点→左),levelorder(节点→左,level +, 1, res); ,,,,,,,if (节点→右),levelorder(节点→右,level +, 1, res); ,,,} }; Github同步地址:https://github.com/grandyang/leetcode/issues/102
类似题目:
二叉树层次顺序遍历二
顺序遍历二叉树锯齿形水平
最小二叉树深度
二叉树垂直顺序Traversal
平均水平的二叉树
n - ary树级别顺序遍历
参考资料:https://leetcode.com/problems/binary-tree-level-order-traversal/
https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/33445/Java-Solution-using-DFS https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/33450/Java-solution-with-a-queue-used https://leetcode.com/problems/binary-tree-level-order-traversal/discuss/114449/A-general-approach-to-level-order-traversal-questions-in-Java
到此,相信大家对“c++怎么实现二叉树层序遍历”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
c++怎么实现二叉树层序遍历