Binary Tree Vertical Order Traversal

来源:互联网 发布:域名购买上godaddy 编辑:程序博客网 时间:2024/06/11 09:59
/** * 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) {        List<List<Integer>> res = new LinkedList<>();        if (root == null) {            return res;        }        Map<Integer, List<Integer>> map = new HashMap<>();        Queue<Integer> queue = new LinkedList<>();        Queue<TreeNode> nodeQueue = new LinkedList<>();        nodeQueue.offer(root);        queue.offer(0);        int min = 0, max = 0;        while (!queue.isEmpty()) {            TreeNode node = nodeQueue.poll();            int column = queue.poll();            if (map.containsKey(column)) {                List<Integer> list = map.get(column);                list.add(node.val);            } else {                List<Integer> list = new LinkedList<>();                list.add(node.val);                map.put(column, list);            }            if (node.left != null) {                nodeQueue.offer(node.left);                queue.offer(column - 1);                if (min > column - 1) {                    min = column - 1;                }            }            if (node.right != null) {                nodeQueue.offer(node.right);                queue.offer(column + 1);                if (max < column + 1) {                    max = column + 1;                }            }         }        for (int i = min; i <= max; i++) {            res.add(map.get(i));        }        return res;    }}

0 0
原创粉丝点击