314 binary tree vertical order traversal
https://leetcode.com/problems/binary-tree-vertical-order-traversal/
关键还是要想到记录col然后整理
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private class Node {
TreeNode node;
int col;
public Node(TreeNode node, int col) {
this.node = node;
this.col = col;
}
}
public List<List<Integer>> verticalOrder(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<List<Integer>> ans = new ArrayList<>();
Queue<Node> queue = new ArrayDeque<>();
queue.offer(new Node(root, 0));
Map<Integer, List<Integer>> map = new HashMap<>();
int minCol = Integer.MAX_VALUE;
int maxCol = Integer.MIN_VALUE;
while (!queue.isEmpty()) {
Node node = queue.poll();
List<Integer> list = map.get(node.col);
minCol = Math.min(minCol, node.col);
maxCol = Math.max(maxCol, node.col);
if (list == null) {
list = new ArrayList<>();
}
list.add(node.node.val);
map.put(node.col, list);
if (node.node.left != null) {
queue.offer(new Node(node.node.left, node.col - 1));
}
if (node.node.right != null) {
queue.offer(new Node(node.node.right, node.col + 1));
}
}
for (int i = minCol; i <= maxCol; i++) {
List<Integer> list = map.get(i);
if (list != null) {
ans.add(list);
}
}
return ans;
}
}
Last updated