863. 二叉树中所有距离为 K 的结点
给定一个二叉树(具有根结点 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;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号