|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bottom, column by column).
- If two nodes are in the same row and column, the order should be from left to right.
- Examples 1:
- Input: [3,9,20,null,null,15,7]
- 3
- /\
- / \
- 9 20
- /\
- / \
- 15 7
- Output:
- [
- [9],
- [3,15],
- [20],
- [7]
- ]
- Examples 2:
- Input: [3,9,8,4,0,1,7]
- 3
- /\
- / \
- 9 8
- /\ /\
- / \/ \
- 4 01 7
- Output:
- [
- [4],
- [9],
- [3,0,1],
- [8],
- [7]
- ]
- Examples 3:
- Input: [3,9,8,4,0,1,7,null,null,null,2,5] (0's right child is 2 and 1's left child is 5)
- 3
- /\
- / \
- 9 8
- /\ /\
- / \/ \
- 4 01 7
- /\
- / \
- 5 2
- Output:
- [
- [4],
- [9,5],
- [3,0,1],
- [8,2],
- [7]
- ]
复制代码
- # Definition for a binary tree node.
- # class TreeNode:
- # def __init__(self, val=0, left=None, right=None):
- # self.val = val
- # self.left = left
- # self.right = right
- class Solution:
- def verticalOrder(self, root: TreeNode) -> List[List[int]]:
- res = []
- if root == None:
- return res
- hashmap = collections.defaultdict(list)
- queue = []
- cols = []
- max_val = 0
- min_val = 0
-
- queue.append(root)
- cols.append(0)
- while queue:
- curt = queue.pop(0)
- col = cols.pop(0)
- hashmap[col].append(curt.val)
- if curt.left != None:
- min_val = min(min_val, col - 1)
- queue.append(curt.left)
- cols.append(col - 1)
- if curt.right != None:
- max_val = max(max_val, col + 1)
- queue.append(curt.right)
- cols.append(col + 1)
-
- for i in range(min_val, max_val + 1):
- res.append(hashmap[i])
- return res
复制代码 |
|