題目描述:code
题目连接: 102-Binary Tree Level Order Traversalblog
这个问题要解决的是如何逐层遍历一个二叉树,并把同一层元素放入同一list中, 再将全部元素返回。递归
其实当时个人第一个反应就是树类型的题目已经作了好多了,无非用来用去就是递归,或者队列,那如何解决这个问题呢?队列
先观察:leetcode
咱们的顺序确定只能从root开始往下走, 同时咱们考虑最基本的形态, 只有一个root, 和两个子节点,[3] 获得 [9, 20]; 而后再由[9, 20] 获得[15, 7];这只是表面上的, 应为null的节点结果里不须要, 实际上的每层数据是如此:get
其实也就是说, 全部当前层的节点, 其实都是由上一层每一个节点的左右子树而来, 直到第一层root为止。可能个人表述有不清楚, 接下来咱们一步一步拆解就是:二叉树
(1)首先咱们获得了root, 就是3这个节点, 放入当前节点列表list, 由于只有root一个, 这一层咱们结束了, 因此就把放入结果集ret中,同时获得下层要用的list(3);rsa
(2)以后第二层怎么获得呢? 天然是以前获得的节点列表list, 从中获得了root, 取root的左右子树, 9, 20, 从新放入list(注意这个list要清空, 或者新建一个), 同时宝塔放入结果集ret中,同时获得下层要用的list(9, 20);遍历
(3)如法炮制:获得list(15, 17) , (注意, 对于9的左右子树,没有的状况就不须要加入list中, 题目要求的结果不须要显示null值。), 放入结果集, 同时获得list(null)im
(4)由于当list(null)时, 也就意味着上一个list 已经到了最后一层, 因此结束。
具体代码:
对了,这以上都是本人的一种思路和想法, 确定还有别的更好的解决方案, 但愿有同窗能够在下面评论一块儿交流探讨:)
哦, 差点忘记提了, 还有一道关联题, https://leetcode.com/problems/binary-tree-level-order-traversal-ii/,要求改为了逆序输出, 即从
最后一层往前倒第一层地逐层遍历, 我想只要将结果集reverse下就行了吧, 或者一开始就递归求解?