|
1 | | -###107. Binary Tree Level Order Traversal II |
2 | | - |
3 | | -题目: |
4 | | - |
5 | | -<https://leetcode.com/problems/binary-tree-level-order-traversal-ii/> |
6 | | - |
7 | | - |
8 | | -难度: |
9 | | - |
10 | | -Easy |
11 | | - |
12 | | - |
13 | | -用102 的算法作弊 |
14 | | - |
15 | | - |
16 | | -``` |
17 | | -# Definition for a binary tree node. |
18 | | -# class TreeNode(object): |
19 | | -# def __init__(self, x): |
20 | | -# self.val = x |
21 | | -# self.left = None |
22 | | -# self.right = None |
23 | | -
|
24 | | -class Solution(object): |
| 1 | +# 107. Binary Tree Level Order Traversal II |
| 2 | + |
| 3 | +**<font color=red>难度: Easy</font>** |
| 4 | + |
| 5 | +## 刷题内容 |
| 6 | + |
| 7 | +> 原题连接 |
| 8 | +
|
| 9 | +* https://leetcode.com/problems/binary-tree-level-order-traversal-ii/description/ |
| 10 | + |
| 11 | +> 内容描述 |
| 12 | +
|
| 13 | +``` |
| 14 | +Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). |
| 15 | +
|
| 16 | +For example: |
| 17 | +Given binary tree [3,9,20,null,null,15,7], |
| 18 | + 3 |
| 19 | + / \ |
| 20 | + 9 20 |
| 21 | + / \ |
| 22 | + 15 7 |
| 23 | +return its bottom-up level order traversal as: |
| 24 | +[ |
| 25 | + [15,7], |
| 26 | + [9,20], |
| 27 | + [3] |
| 28 | +] |
| 29 | +``` |
| 30 | + |
| 31 | +## 解题方案 |
| 32 | + |
| 33 | +> 思路 1 |
| 34 | +******- 时间复杂度: O(N)******- 空间复杂度: O(N)****** |
| 35 | + |
| 36 | + |
| 37 | +用102 的算法作弊 |
| 38 | + |
| 39 | + |
| 40 | +```python |
| 41 | +class Solution: |
25 | 42 | def levelOrderBottom(self, root): |
26 | 43 | """ |
27 | 44 | :type root: TreeNode |
28 | 45 | :rtype: List[List[int]] |
29 | 46 | """ |
| 47 | + def dfs(node, level, res): |
| 48 | + if not node: |
| 49 | + return |
| 50 | + if len(res) < level: |
| 51 | + res.append([]) |
| 52 | + res[level-1].append(node.val) |
| 53 | + dfs(node.left, level+1, res) |
| 54 | + dfs(node.right, level+1, res) |
| 55 | + |
30 | 56 | res = [] |
31 | | - |
32 | | - if root == None: return [] |
33 | | - |
34 | | - curLevel = [root] |
35 | | - while curLevel: |
36 | | - nextLevel = [] |
37 | | - tmpRes = [] |
38 | | - for node in curLevel: |
39 | | - tmpRes.append(node.val) |
40 | | - if node.left: nextLevel.append(node.left) |
41 | | - if node.right: nextLevel.append(node.right) |
42 | | - res.append(tmpRes) |
43 | | - curLevel = nextLevel |
44 | | - res.reverse() |
45 | | - return res |
46 | | -``` |
47 | | - |
48 | | - |
| 57 | + dfs(root, 1, res) |
| 58 | + return res[::-1] |
| 59 | +``` |
| 60 | + |
| 61 | + |
0 commit comments