題目描述:

题目链接: 102-Binary Tree Level Order Traversal

这个问题要解决的是如何逐层遍历一个二叉树,并把同一层元素放入同一list中, 再将所有元素返回。

其实当时我的第一个反应就是树类型的题目已经做了好多了,无非用来用去就是递归,或者队列,那如何解决这个问题呢?

先观察:

我们的顺序肯定只能从root开始往下走, 同时我们考虑最基本的形态, 只有一个root, 和两个子节点,[3] 得到 [9, 20]; 然后再由[9, 20] 得到[15, 7];这只是表面上的, 应为null的节点结果里不需要, 实际上的每层数据是如此:

    

其实也就是说, 所有当前层的节点, 其实都是由上一层每个节点的左右子树而来, 直到第一层root为止。可能我的表述有不清楚, 接下来我们一步一步拆解就是:

(1)首先我们得到了root, 就是3这个节点, 放入当前节点列表list, 因为只有root一个, 这一层我们结束了, 所以就把放入结果集ret中,同时得到下层要用的list(3);

(2)之后第二层怎么得到呢? 自然是之前得到的节点列表list, 从中得到了root, 取root的左右子树, 9, 20, 重新放入list(注意这个list要清空, 或者新建一个), 同时宝塔放入结果集ret中,同时得到下层要用的list(9, 20);

(3)如法炮制:得到list(15, 17) , (注意, 对于9的左右子树,没有的情况就不需要加入list中, 题目要求的结果不需要显示null值。), 放入结果集, 同时得到list(null)

(4)因为当list(null)时, 也就意味着上一个list 已经到了最后一层, 所以结束。

具体代码:

对了,这以上都是本人的一种思路和想法, 肯定还有别的更好的解决方案, 希望有同学可以在下面评论一起交流探讨:)

哦, 差点忘记提了, 还有一道关联题, https://leetcode.com/problems/binary-tree-level-order-traversal-ii/,要求改成了逆序输出, 即从

最后一层往前倒第一层地逐层遍历, 我想只要将结果集reverse下就好了吧, 或者一开始就递归求解?

leecode 每日解题思路 102-Binary Tree Level Order Traversal的更多相关文章

  1. [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  2. 102. Binary Tree Level Order Traversal 广度优先遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. 【LeetCode】102. Binary Tree Level Order Traversal (2 solutions)

    Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...

  4. [刷题] 102 Binary Tree Level Order Traversal

    要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...

  5. 【LeetCode】102. Binary Tree Level Order Traversal 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目描述 Given a bi ...

  6. Java [Leetcode 102]Binary Tree Level Order Traversal

    题目描述: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...

  7. 【一天一道LeetCode】#102. Binary Tree Level Order Traversal

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  8. Java for LeetCode 102 Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  9. [LeetCode]题解(python):102 Binary Tree Level Order Traversal

    题目来源 https://leetcode.com/problems/binary-tree-level-order-traversal/ Given a binary tree, return th ...

  10. 102. Binary Tree Level Order Traversal (Tree, Queue; BFS)

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

随机推荐

  1. php stdClass Object 问题

    Array ( [0] => stdClass Object ( [term_id] => 3 [name] => apache [slug] => apache [term_ ...

  2. Android开发规范

    一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能 ...

  3. oracle database resident connection pooling(驻留连接池)

    oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...

  4. 【HDOJ】3957 Street Fighter

    一定要注意审题啊,题目说的是选出做少的英雄打败其余处在任何模式下的英雄.共有Sigma(num of model)个方案,每个方案有Sigma(num of model)+n个决策.挺不错的一道精确覆 ...

  5. Android开发UI之布局文件LinearLayout

    LinearLayout-线性布局,该布局中的控件按照水平方向排列或者竖直方向排列. 通过属性android:orientation=""决定的,可选值:vertical和hori ...

  6. Eclipse问题解决方案,不断更新

    执行“software update”时出现:Error retrieving "feature.xml"... 执行“software update”时出现:Error retr ...

  7. 【转】Optiplex 7010驱动下载链接(XP&Windows7

    原文网址:http://zh.community.dell.com/support_forums/desktops/f/236/t/2606 x 7010驱动下载链接(XP&Windows7) ...

  8. 看懂SqlServer查询计划

    看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...

  9. arcgis for android访问arcgis server上自己制作部署的地图服务

    转自:http://gaomw.iteye.com/blog/1110437 本项目的开发环境是eclipse3.5 + ADT11插件+arcgis for andorid 插件 + arcgis ...

  10. Cocos2d-x获取随机数

    计算机是无法产生真正的随机数的,都是伪随机.获取随机数的方式和算法多种多样,这里只给出一种方法,基于最新的C++11. 1 2 3 4 5 #include <random> std::u ...