public class Solution {
public List<List<Integer>> verticalOrder(TreeNode root) {
List<List<Integer/*TreeNode.val*/>> result = new LinkedList<>();
if (root == null) {
return result;
}
Map<Integer/*column*/, List<Integer/*TreeNode.val*/>> map = new HashMap<>();
Queue<Integer/*column*/> queueC = new LinkedList<>();
Queue<TreeNode/*TreeNode*/> queueN = new LinkedList<>();
queueC.offer(0);
queueN.offer(root);
int max = 0, min = 0;
while (!queueN.isEmpty()) {
int column = queueC.poll();
TreeNode node = queueN.poll();
if (!map.containsKey(column)) {
List<Integer> list = new LinkedList<>();
list.add(node.val);
map.put(column, list);
} else {
List<Integer> list = map.get(column);
list.add(node.val);
}
if (node.left != null) {
queueC.offer(column - 1);
queueN.offer(node.left);
if (min > column - 1) {
min = column - 1;
}
}
if (node.right != null) {
queueC.offer(column + 1);
queueN.offer(node.right);
if (max < column + 1) {
max = column + 1;
}
}
}
for (int i = min; i <= max; i++) {
result.add(map.get(i));
}
return result;
}
}
Binary Tree Vertical Order Traversal
最新推荐文章于 2025-02-03 15:37:10 发布