给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 `[3,9,20,null,null,15,7]` , 3 / \ 9 20 / \ 15 7 返回其自底向上的层次遍历为: ```js [ [15,7], [9,20], [3] ] ``` 附赠leetcode地址:[leetcode](https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/javascripter-cha-shu-de-ceng-xu-bian-li-by-user774/)
Activity
plane-hjh commentedon May 21, 2020
广度优先遍历或者深度优先遍历
fanefanes commentedon May 21, 2020
luweiCN commentedon May 21, 2020
使用一个嵌套队列,外层队列保存每层的数据,内层的队列保存当前层所有的节点
时间复杂度:每个节点都会被遍历一次,因此时间复杂度是
O(n)空间复杂度:需要存储整棵树的值,因此空间复杂度是
O(n)zhdxmw commentedon May 21, 2020
sisterAn commentedon May 21, 2020
解法一:BFS(广度优先遍历)
BFS 是按层层推进的方式,遍历每一层的节点。题目要求的是返回每一层的节点值,所以这题用 BFS 来做非常合适。
BFS 需要用队列作为辅助结构,我们先将根节点放到队列中,然后不断遍历队列。
复杂度分析
解法二:DFS(深度优先遍历)
DFS 是沿着树的深度遍历树的节点,尽可能深地搜索树的分支
DFS 做本题的主要问题是: DFS 不是按照层次遍历的。为了让递归的过程中同一层的节点放到同一个列表中,在递归时要记录每个节点的深度
depth。递归到新节点要把该节点放入depth对应列表的末尾。当遍历到一个新的深度
depth,而最终结果res中还没有创建depth对应的列表时,应该在res中新建一个列表用来保存该depth的所有节点。复杂度分析:
leetcode
AnranS commentedon Nov 19, 2020
Rabbitzzc commentedon Mar 28, 2021
DFS 带着递归
BFS 带着栈