leetcode解题-binary tree level order traversal ii


描述

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).

For example:
Given binary tree {3,9,20,#,#,15,7},
3
/
9 20
/
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]

分析

Level Order Traveral的姐妹版,要求最底层的先输出。

代码

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from collections import deque



class (object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None


class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

queue = deque()
d = {}
if not root:
return []
queue.append((root, 0))
while queue:
cur, idx = queue.popleft()
d.setdefault(idx, []).append(cur.val)
if cur.left:
queue.append((cur.left, idx + 1))
if cur.right:
queue.append((cur.right, idx + 1))
return [v for k, v in sorted(d.items(), key=lambda x: -x[0])]