* Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class{ Map<TreeNode, HashSet<TreeNode>> map = new HashMap<>(); public List<Integer> distanceK(TreeNode root, TreeNode target, int K){ List<Integer> list = new ArrayList<>(); if (root == null) return list; buildMap(root); Queue<TreeNode> q = new LinkedList<>(); q.offer(target); Set<TreeNode> visited = new HashSet<>(); visited.add(target); boolean found = false; int dis = 0; while (!q.isEmpty()) { int len = q.size(); for (int size = 0; size < len; size++) { TreeNode cur = q.poll(); if (dis == K) { list.add(cur.val); found = true; }else { if (!map.get(cur).isEmpty()) { for (TreeNode t : map.get(cur)) { if (!visited.contains(t)) { q.offer(t); visited.add(t); } } } } } if (found) return list; dis++; } return list; } publicvoidbuildMap(TreeNode node){ Queue<TreeNode> q = new LinkedList<>(); q.offer(node); map.put(node, new HashSet<TreeNode>()); while (!q.isEmpty()) { TreeNode cur = q.poll(); if (cur.left != null) { map.put(cur.left, new HashSet<TreeNode>()); map.get(cur).add(cur.left); map.get(cur.left).add(cur); q.offer(cur.left); } if (cur.right != null) { map.put(cur.right, new HashSet<TreeNode>()); map.get(cur).add(cur.right); map.get(cur.right).add(cur); q.offer(cur.right); } } } }
近期评论