314. Binary Tree Vertical Order Traversal
Problem description:
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]1
2
3
4
5
6
7 3
/\
/ \
9 20
/\
/ \
15 7
Output:1
2
3
4
5
6[
[9],
[3,15],
[20],
[7]
]
Examples 2:
Input: [3,9,8,4,0,1,7]1
2
3
4
5
6
7 3
/\
/ \
9 8
/\ /\
/ \/ \
4 01 7
Output:1
2
3
4
5
6
7[
[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)1
2
3
4
5
6
7
8
9
10 3
/\
/ \
9 8
/\ /\
/ \/ \
4 01 7
/\
/ \
5 2
Output:1
2
3
4
5
6
7[
[4],
[9,5],
[3,0,1],
[8,2],
[7]
]
Solution:
The idea is to construct a map with the vertical index and every value of that level. By using map, we can get ascending index by default.
Then we use BFS to walk though the tree. If it’s a left node, then the index should be smaller. If it’s a right node, the index should be greater
1 | # Definition for a binary tree node. |
1 | /** |
time complexity:
map use $O(log n)$ for insertion, total is n node, so $O(nlogn)$
DFS
Similar idea but we need row information to know which row comes first. Because during inorder traverse, on the right subtree, we would traverse bottom left first.
1 | # Definition for a binary tree node. |
reference:
http://www.cnblogs.com/grandyang/p/5278930.html
https://goo.gl/yfKXEE