863. 二叉樹中所有距離為 K 的結點
阿新 • • 發佈:2022-01-07
給定一個二叉樹(具有根結點root),一個目標結點target,和一個整數值 K 。
返回到目標結點 target 距離為 K 的所有結點的值的列表。 答案可以以任何順序返回。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Solution { private int k; private Map<TreeNode, TreeNode> parentMap = new HashMap<>(); private List<Integer> ans = new ArrayList<>(); private void dfs1(TreeNode root, TreeNode parent) { if (root == null) { return; } parentMap.put(root, parent); dfs1(root.left, root); dfs1(root.right, root); } private void dfs2(TreeNode root, TreeNode pre, int deep) { if (deep == k) { ans.add(root.val); return; } TreeNode parent = parentMap.get(root); if (parent != null && pre != parent) { dfs2(parent, root, deep + 1); } if (root.left != null && pre != root.left) { dfs2(root.left, root, deep + 1); } if (root.right != null && pre != root.right) { dfs2(root.right, root, deep + 1); } } public List<Integer> distanceK(TreeNode root, TreeNode target, int k) { this.k = k; dfs1(root, null); dfs2(target, null, 0); return ans; } } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }