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;
    }
}

posted @ 2022-01-06 22:17  Tianyiya  阅读(42)  评论(0)    收藏  举报