c++怎么实现二叉树层序遍历

  介绍

本篇内容主要讲解“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++怎么实现二叉树层序遍历