107.二叉树的层序遍历 II
【LetMeFly】107.二叉树的层序遍历 II:正常遍历后翻转
力扣题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/
给你二叉树的根节点 root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]]
示例 2:
输入:root = [1] 输出:[[1]]
示例 3:
输入:root = [] 输出:[]
提示:
- 树中节点数目在范围
[0, 2000]
内 -1000 <= Node.val <= 1000
方法一:优先队列
与之前方法不同,这次决定不使用pair<TreeNode*, int>
,而是直接使用TreeNode*
入队。
看不懂的可以先看之前这篇博客:https://letmefly.blog.csdn.net/article/details/125584554
那么,没有了int
类型的层数,怎么判断哪些节点是属于同一层的呢?
其实也很简单,我们在队列不空的时候,记录下来队列中一共由多少个元素,这些元素的个数就是当前最后一层的节点的个数。
然后,我们用一个循环,把这些元素全都添加到答案的同一层中(同时把子节点入队)即可。
- 时间复杂度$O(N)$,其中$N$是节点个数。
- 空间复杂度$O(N2)$,其中$N2$是节点最多的一层的节点数。
AC代码
C++
1 |
|
Python
1 |
|
其实Python的队列可以使用collections.deque。
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125610699
107.二叉树的层序遍历 II
https://blog.letmefly.xyz/2022/07/04/LeetCode 0107.二叉树的层序遍历II/