314. Binary Tree Vertical Order Traversal
Binary Tree Vertical Order Traversal
Last updated
Binary Tree Vertical Order Traversal
Last updated
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> verticalOrder(TreeNode root) {
if (root == null) return new ArrayList<>();
Map<Integer, List<Integer>> map = new HashMap<>();
Queue<Result> queue = new LinkedList<>();
queue.add(new Result(root, 0));
while (!queue.isEmpty()) {
Result cur = queue.poll();
TreeNode node = cur.node;
List<Integer> curList = new ArrayList<>();
curList.add(cur.node.val);
map.merge(cur.index, curList, (a, b) -> {
a.addAll(b);
return a;
});
if (node.left != null) {
queue.add(new Result(node.left, cur.index-1));
}
if (node.right != null) {
queue.add(new Result(node.right, cur.index+1));
}
}
List<Integer> keys = map.keySet().stream().sorted().collect(Collectors.toList());
List<List<Integer>> result = new ArrayList<>();
for (Integer key : keys) {
result.add(map.get(key));
}
return result;
}
private class Result {
TreeNode node;
int index;
public Result(TreeNode node, int index) {
this.node = node;
this.index = index;
}
}
}